meson_dw_hdmi
struct meson_dw_hdmi;
unsigned int (*top_read)(struct meson_dw_hdmi *dw_hdmi,
void (*top_write)(struct meson_dw_hdmi *dw_hdmi,
unsigned int (*dwc_read)(struct meson_dw_hdmi *dw_hdmi,
void (*dwc_write)(struct meson_dw_hdmi *dw_hdmi,
static inline int dw_hdmi_is_compatible(struct meson_dw_hdmi *dw_hdmi,
static unsigned int dw_hdmi_top_read(struct meson_dw_hdmi *dw_hdmi,
static unsigned int dw_hdmi_g12a_top_read(struct meson_dw_hdmi *dw_hdmi,
static inline void dw_hdmi_top_write(struct meson_dw_hdmi *dw_hdmi,
static inline void dw_hdmi_g12a_top_write(struct meson_dw_hdmi *dw_hdmi,
static inline void dw_hdmi_top_write_bits(struct meson_dw_hdmi *dw_hdmi,
static unsigned int dw_hdmi_dwc_read(struct meson_dw_hdmi *dw_hdmi,
static unsigned int dw_hdmi_g12a_dwc_read(struct meson_dw_hdmi *dw_hdmi,
static inline void dw_hdmi_dwc_write(struct meson_dw_hdmi *dw_hdmi,
static inline void dw_hdmi_g12a_dwc_write(struct meson_dw_hdmi *dw_hdmi,
static void meson_hdmi_phy_setup_mode(struct meson_dw_hdmi *dw_hdmi,
static inline void meson_dw_hdmi_phy_reset(struct meson_dw_hdmi *dw_hdmi)
struct meson_dw_hdmi *dw_hdmi = (struct meson_dw_hdmi *)data;
struct meson_dw_hdmi *dw_hdmi = (struct meson_dw_hdmi *)data;
struct meson_dw_hdmi *dw_hdmi = (struct meson_dw_hdmi *)data;
struct meson_dw_hdmi *dw_hdmi = (struct meson_dw_hdmi *)data;
struct meson_dw_hdmi *dw_hdmi = dev_id;
struct meson_dw_hdmi *dw_hdmi = dev_id;
struct meson_dw_hdmi *dw_hdmi = context;
struct meson_dw_hdmi *dw_hdmi = context;
static void meson_dw_hdmi_init(struct meson_dw_hdmi *meson_dw_hdmi)
struct meson_drm *priv = meson_dw_hdmi->priv;
reset_control_reset(meson_dw_hdmi->hdmitx_apb);
reset_control_reset(meson_dw_hdmi->hdmitx_ctrl);
reset_control_reset(meson_dw_hdmi->hdmitx_phy);
meson_dw_hdmi->hdmitx + HDMITX_TOP_CTRL_REG);
meson_dw_hdmi->hdmitx + HDMITX_DWC_CTRL_REG);
meson_dw_hdmi->data->top_write(meson_dw_hdmi,
meson_dw_hdmi->data->top_write(meson_dw_hdmi,
meson_dw_hdmi->data->top_write(meson_dw_hdmi, HDMITX_TOP_BIST_CNTL, BIT(12));
regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL1, meson_dw_hdmi->data->cntl1_init);
regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, meson_dw_hdmi->data->cntl0_init);
meson_dw_hdmi->data->top_write(meson_dw_hdmi, HDMITX_TOP_INTR_STAT_CLR,
meson_dw_hdmi->data->top_write(meson_dw_hdmi, HDMITX_TOP_INTR_MASKN,
struct meson_dw_hdmi *meson_dw_hdmi;
meson_dw_hdmi = devm_kzalloc(dev, sizeof(*meson_dw_hdmi),
if (!meson_dw_hdmi)
meson_dw_hdmi->priv = priv;
meson_dw_hdmi->dev = dev;
meson_dw_hdmi->data = match;
dw_plat_data = &meson_dw_hdmi->dw_plat_data;
meson_dw_hdmi->hdmitx_apb = devm_reset_control_get_exclusive(dev,
if (IS_ERR(meson_dw_hdmi->hdmitx_apb)) {
return PTR_ERR(meson_dw_hdmi->hdmitx_apb);
meson_dw_hdmi->hdmitx_ctrl = devm_reset_control_get_exclusive(dev,
if (IS_ERR(meson_dw_hdmi->hdmitx_ctrl)) {
return PTR_ERR(meson_dw_hdmi->hdmitx_ctrl);
meson_dw_hdmi->hdmitx_phy = devm_reset_control_get_exclusive(dev,
if (IS_ERR(meson_dw_hdmi->hdmitx_phy)) {
return PTR_ERR(meson_dw_hdmi->hdmitx_phy);
meson_dw_hdmi->hdmitx = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(meson_dw_hdmi->hdmitx))
return PTR_ERR(meson_dw_hdmi->hdmitx);
dw_plat_data->regm = devm_regmap_init(dev, NULL, meson_dw_hdmi,
"dw_hdmi_top_irq", meson_dw_hdmi);
meson_dw_hdmi_init(meson_dw_hdmi);
dw_plat_data->priv_data = meson_dw_hdmi;
dw_plat_data->phy_data = meson_dw_hdmi;
if (dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-gxl-dw-hdmi") ||
dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-gxm-dw-hdmi") ||
dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-g12a-dw-hdmi"))
platform_set_drvdata(pdev, meson_dw_hdmi);
meson_dw_hdmi->hdmi = dw_hdmi_probe(pdev, &meson_dw_hdmi->dw_plat_data);
if (IS_ERR(meson_dw_hdmi->hdmi))
return PTR_ERR(meson_dw_hdmi->hdmi);
meson_dw_hdmi->bridge = of_drm_find_and_get_bridge(pdev->dev.of_node);
struct meson_dw_hdmi *meson_dw_hdmi = dev_get_drvdata(dev);
devm_free_irq(dev, irq, meson_dw_hdmi);
dw_hdmi_unbind(meson_dw_hdmi->hdmi);
drm_bridge_put(meson_dw_hdmi->bridge);
struct meson_dw_hdmi *meson_dw_hdmi = dev_get_drvdata(dev);
if (!meson_dw_hdmi)
meson_dw_hdmi->data->top_write(meson_dw_hdmi,
struct meson_dw_hdmi *meson_dw_hdmi = dev_get_drvdata(dev);
if (!meson_dw_hdmi)
meson_dw_hdmi_init(meson_dw_hdmi);
dw_hdmi_resume(meson_dw_hdmi->hdmi);