2018-02-15 04:09:04 +08:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
|
|
/*
|
|
|
|
* Copyright (C) 2018 Jernej Skrabec <jernej.skrabec@siol.net>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _SUN8I_DW_HDMI_H_
|
|
|
|
#define _SUN8I_DW_HDMI_H_
|
|
|
|
|
|
|
|
#include <drm/bridge/dw_hdmi.h>
|
|
|
|
#include <drm/drm_encoder.h>
|
|
|
|
#include <linux/clk.h>
|
|
|
|
#include <linux/regmap.h>
|
|
|
|
#include <linux/reset.h>
|
|
|
|
|
2018-03-02 05:34:36 +08:00
|
|
|
struct sun8i_hdmi_phy;
|
|
|
|
|
|
|
|
struct sun8i_hdmi_phy_variant {
|
|
|
|
void (*phy_init)(struct sun8i_hdmi_phy *phy);
|
|
|
|
void (*phy_disable)(struct dw_hdmi *hdmi,
|
|
|
|
struct sun8i_hdmi_phy *phy);
|
|
|
|
int (*phy_config)(struct dw_hdmi *hdmi,
|
|
|
|
struct sun8i_hdmi_phy *phy,
|
|
|
|
unsigned int clk_rate);
|
|
|
|
};
|
|
|
|
|
2018-02-15 04:09:04 +08:00
|
|
|
struct sun8i_hdmi_phy {
|
2018-03-02 05:34:36 +08:00
|
|
|
struct clk *clk_bus;
|
|
|
|
struct clk *clk_mod;
|
|
|
|
struct regmap *regs;
|
|
|
|
struct reset_control *rst_phy;
|
|
|
|
struct sun8i_hdmi_phy_variant *variant;
|
2018-02-15 04:09:04 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct sun8i_dw_hdmi {
|
|
|
|
struct clk *clk_tmds;
|
|
|
|
struct device *dev;
|
|
|
|
struct dw_hdmi *hdmi;
|
|
|
|
struct drm_encoder encoder;
|
|
|
|
struct sun8i_hdmi_phy *phy;
|
|
|
|
struct dw_hdmi_plat_data plat_data;
|
|
|
|
struct reset_control *rst_ctrl;
|
|
|
|
};
|
|
|
|
|
|
|
|
static inline struct sun8i_dw_hdmi *
|
|
|
|
encoder_to_sun8i_dw_hdmi(struct drm_encoder *encoder)
|
|
|
|
{
|
|
|
|
return container_of(encoder, struct sun8i_dw_hdmi, encoder);
|
|
|
|
}
|
|
|
|
|
|
|
|
int sun8i_hdmi_phy_probe(struct sun8i_dw_hdmi *hdmi, struct device_node *node);
|
|
|
|
void sun8i_hdmi_phy_remove(struct sun8i_dw_hdmi *hdmi);
|
|
|
|
|
|
|
|
void sun8i_hdmi_phy_init(struct sun8i_hdmi_phy *phy);
|
|
|
|
const struct dw_hdmi_phy_ops *sun8i_hdmi_phy_get_ops(void);
|
|
|
|
|
|
|
|
#endif /* _SUN8I_DW_HDMI_H_ */
|