Commit ff139560 authored by CK Hu's avatar CK Hu Committed by Chun-Kuang Hu

drm/mediatek: Move mtk_ddp_comp_init() from sub driver to DRM driver

Some ddp component exist in both display path and other path, so
sub driver should not directly call DRM driver's function. Moving
mtk_ddp_comp_init() from sub driver to DRM driver to achieve this.
Signed-off-by: default avatarCK Hu <ck.hu@mediatek.com>
Signed-off-by: default avatarChun-Kuang Hu <chunkuang.hu@kernel.org>
parent 1d33f13a
...@@ -37,7 +37,6 @@ struct mtk_disp_color_data { ...@@ -37,7 +37,6 @@ struct mtk_disp_color_data {
* @data: platform colour driver data * @data: platform colour driver data
*/ */
struct mtk_disp_color { struct mtk_disp_color {
struct mtk_ddp_comp ddp_comp;
struct drm_crtc *crtc; struct drm_crtc *crtc;
struct clk *clk; struct clk *clk;
void __iomem *regs; void __iomem *regs;
...@@ -81,27 +80,12 @@ void mtk_color_start(struct device *dev) ...@@ -81,27 +80,12 @@ void mtk_color_start(struct device *dev)
static int mtk_disp_color_bind(struct device *dev, struct device *master, static int mtk_disp_color_bind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct mtk_disp_color *priv = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
int ret;
ret = mtk_ddp_comp_register(drm_dev, &priv->ddp_comp);
if (ret < 0) {
dev_err(dev, "Failed to register component %pOF: %d\n",
dev->of_node, ret);
return ret;
}
return 0; return 0;
} }
static void mtk_disp_color_unbind(struct device *dev, struct device *master, static void mtk_disp_color_unbind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct mtk_disp_color *priv = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
mtk_ddp_comp_unregister(drm_dev, &priv->ddp_comp);
} }
static const struct component_ops mtk_disp_color_component_ops = { static const struct component_ops mtk_disp_color_component_ops = {
...@@ -114,7 +98,6 @@ static int mtk_disp_color_probe(struct platform_device *pdev) ...@@ -114,7 +98,6 @@ static int mtk_disp_color_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct mtk_disp_color *priv; struct mtk_disp_color *priv;
struct resource *res; struct resource *res;
int comp_id;
int ret; int ret;
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
...@@ -139,23 +122,7 @@ static int mtk_disp_color_probe(struct platform_device *pdev) ...@@ -139,23 +122,7 @@ static int mtk_disp_color_probe(struct platform_device *pdev)
dev_dbg(dev, "get mediatek,gce-client-reg fail!\n"); dev_dbg(dev, "get mediatek,gce-client-reg fail!\n");
#endif #endif
comp_id = mtk_ddp_comp_get_id(dev->of_node, MTK_DISP_COLOR);
if (comp_id < 0) {
dev_err(dev, "Failed to identify by alias: %d\n", comp_id);
return comp_id;
}
ret = mtk_ddp_comp_init(dev->of_node, &priv->ddp_comp, comp_id);
if (ret) {
if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to initialize component: %d\n",
ret);
return ret;
}
priv->data = of_device_get_match_data(dev); priv->data = of_device_get_match_data(dev);
platform_set_drvdata(pdev, priv); platform_set_drvdata(pdev, priv);
ret = component_add(dev, &mtk_disp_color_component_ops); ret = component_add(dev, &mtk_disp_color_component_ops);
...@@ -167,8 +134,6 @@ static int mtk_disp_color_probe(struct platform_device *pdev) ...@@ -167,8 +134,6 @@ static int mtk_disp_color_probe(struct platform_device *pdev)
static int mtk_disp_color_remove(struct platform_device *pdev) static int mtk_disp_color_remove(struct platform_device *pdev)
{ {
component_del(&pdev->dev, &mtk_disp_color_component_ops);
return 0; return 0;
} }
......
...@@ -71,7 +71,6 @@ struct mtk_disp_ovl_data { ...@@ -71,7 +71,6 @@ struct mtk_disp_ovl_data {
* @data: platform data * @data: platform data
*/ */
struct mtk_disp_ovl { struct mtk_disp_ovl {
struct mtk_ddp_comp ddp_comp;
struct drm_crtc *crtc; struct drm_crtc *crtc;
struct clk *clk; struct clk *clk;
void __iomem *regs; void __iomem *regs;
...@@ -342,27 +341,12 @@ void mtk_ovl_bgclr_in_off(struct device *dev) ...@@ -342,27 +341,12 @@ void mtk_ovl_bgclr_in_off(struct device *dev)
static int mtk_disp_ovl_bind(struct device *dev, struct device *master, static int mtk_disp_ovl_bind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct mtk_disp_ovl *priv = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
int ret;
ret = mtk_ddp_comp_register(drm_dev, &priv->ddp_comp);
if (ret < 0) {
dev_err(dev, "Failed to register component %pOF: %d\n",
dev->of_node, ret);
return ret;
}
return 0; return 0;
} }
static void mtk_disp_ovl_unbind(struct device *dev, struct device *master, static void mtk_disp_ovl_unbind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct mtk_disp_ovl *priv = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
mtk_ddp_comp_unregister(drm_dev, &priv->ddp_comp);
} }
static const struct component_ops mtk_disp_ovl_component_ops = { static const struct component_ops mtk_disp_ovl_component_ops = {
...@@ -375,7 +359,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev) ...@@ -375,7 +359,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct mtk_disp_ovl *priv; struct mtk_disp_ovl *priv;
struct resource *res; struct resource *res;
int comp_id;
int irq; int irq;
int ret; int ret;
...@@ -406,25 +389,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev) ...@@ -406,25 +389,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev)
#endif #endif
priv->data = of_device_get_match_data(dev); priv->data = of_device_get_match_data(dev);
comp_id = mtk_ddp_comp_get_id(dev->of_node,
priv->data->layer_nr == 4 ?
MTK_DISP_OVL :
MTK_DISP_OVL_2L);
if (comp_id < 0) {
dev_err(dev, "Failed to identify by alias: %d\n", comp_id);
return comp_id;
}
ret = mtk_ddp_comp_init(dev->of_node, &priv->ddp_comp, comp_id);
if (ret) {
if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to initialize component: %d\n",
ret);
return ret;
}
platform_set_drvdata(pdev, priv); platform_set_drvdata(pdev, priv);
ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler, ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler,
...@@ -443,8 +407,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev) ...@@ -443,8 +407,6 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev)
static int mtk_disp_ovl_remove(struct platform_device *pdev) static int mtk_disp_ovl_remove(struct platform_device *pdev)
{ {
component_del(&pdev->dev, &mtk_disp_ovl_component_ops);
return 0; return 0;
} }
......
...@@ -62,7 +62,6 @@ struct mtk_disp_rdma_data { ...@@ -62,7 +62,6 @@ struct mtk_disp_rdma_data {
* @data: local driver data * @data: local driver data
*/ */
struct mtk_disp_rdma { struct mtk_disp_rdma {
struct mtk_ddp_comp ddp_comp;
struct clk *clk; struct clk *clk;
void __iomem *regs; void __iomem *regs;
struct cmdq_client_reg cmdq_reg; struct cmdq_client_reg cmdq_reg;
...@@ -250,17 +249,6 @@ void mtk_rdma_layer_config(struct device *dev, unsigned int idx, ...@@ -250,17 +249,6 @@ void mtk_rdma_layer_config(struct device *dev, unsigned int idx,
static int mtk_disp_rdma_bind(struct device *dev, struct device *master, static int mtk_disp_rdma_bind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct mtk_disp_rdma *priv = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
int ret;
ret = mtk_ddp_comp_register(drm_dev, &priv->ddp_comp);
if (ret < 0) {
dev_err(dev, "Failed to register component %pOF: %d\n",
dev->of_node, ret);
return ret;
}
return 0; return 0;
} }
...@@ -268,10 +256,6 @@ static int mtk_disp_rdma_bind(struct device *dev, struct device *master, ...@@ -268,10 +256,6 @@ static int mtk_disp_rdma_bind(struct device *dev, struct device *master,
static void mtk_disp_rdma_unbind(struct device *dev, struct device *master, static void mtk_disp_rdma_unbind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct mtk_disp_rdma *priv = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
mtk_ddp_comp_unregister(drm_dev, &priv->ddp_comp);
} }
static const struct component_ops mtk_disp_rdma_component_ops = { static const struct component_ops mtk_disp_rdma_component_ops = {
...@@ -284,7 +268,6 @@ static int mtk_disp_rdma_probe(struct platform_device *pdev) ...@@ -284,7 +268,6 @@ static int mtk_disp_rdma_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct mtk_disp_rdma *priv; struct mtk_disp_rdma *priv;
struct resource *res; struct resource *res;
int comp_id;
int irq; int irq;
int ret; int ret;
...@@ -314,21 +297,6 @@ static int mtk_disp_rdma_probe(struct platform_device *pdev) ...@@ -314,21 +297,6 @@ static int mtk_disp_rdma_probe(struct platform_device *pdev)
dev_dbg(dev, "get mediatek,gce-client-reg fail!\n"); dev_dbg(dev, "get mediatek,gce-client-reg fail!\n");
#endif #endif
comp_id = mtk_ddp_comp_get_id(dev->of_node, MTK_DISP_RDMA);
if (comp_id < 0) {
dev_err(dev, "Failed to identify by alias: %d\n", comp_id);
return comp_id;
}
ret = mtk_ddp_comp_init(dev->of_node, &priv->ddp_comp, comp_id);
if (ret) {
if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to initialize component: %d\n",
ret);
return ret;
}
/* Disable and clear pending interrupts */ /* Disable and clear pending interrupts */
writel(0x0, priv->regs + DISP_REG_RDMA_INT_ENABLE); writel(0x0, priv->regs + DISP_REG_RDMA_INT_ENABLE);
writel(0x0, priv->regs + DISP_REG_RDMA_INT_STATUS); writel(0x0, priv->regs + DISP_REG_RDMA_INT_STATUS);
......
...@@ -63,7 +63,6 @@ enum mtk_dpi_out_color_format { ...@@ -63,7 +63,6 @@ enum mtk_dpi_out_color_format {
}; };
struct mtk_dpi { struct mtk_dpi {
struct mtk_ddp_comp ddp_comp;
struct drm_encoder encoder; struct drm_encoder encoder;
struct drm_bridge bridge; struct drm_bridge bridge;
struct drm_bridge *next_bridge; struct drm_bridge *next_bridge;
...@@ -583,21 +582,14 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data) ...@@ -583,21 +582,14 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data)
struct drm_device *drm_dev = data; struct drm_device *drm_dev = data;
int ret; int ret;
ret = mtk_ddp_comp_register(drm_dev, &dpi->ddp_comp);
if (ret < 0) {
dev_err(dev, "Failed to register component %pOF: %d\n",
dev->of_node, ret);
return ret;
}
ret = drm_simple_encoder_init(drm_dev, &dpi->encoder, ret = drm_simple_encoder_init(drm_dev, &dpi->encoder,
DRM_MODE_ENCODER_TMDS); DRM_MODE_ENCODER_TMDS);
if (ret) { if (ret) {
dev_err(dev, "Failed to initialize decoder: %d\n", ret); dev_err(dev, "Failed to initialize decoder: %d\n", ret);
goto err_unregister; return ret;
} }
dpi->encoder.possible_crtcs = mtk_drm_find_possible_crtc_by_comp(drm_dev, dpi->ddp_comp); dpi->encoder.possible_crtcs = mtk_drm_find_possible_crtc_by_comp(drm_dev, dpi->dev);
ret = drm_bridge_attach(&dpi->encoder, &dpi->bridge, NULL, 0); ret = drm_bridge_attach(&dpi->encoder, &dpi->bridge, NULL, 0);
if (ret) { if (ret) {
...@@ -614,8 +606,6 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data) ...@@ -614,8 +606,6 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data)
err_cleanup: err_cleanup:
drm_encoder_cleanup(&dpi->encoder); drm_encoder_cleanup(&dpi->encoder);
err_unregister:
mtk_ddp_comp_unregister(drm_dev, &dpi->ddp_comp);
return ret; return ret;
} }
...@@ -623,10 +613,8 @@ static void mtk_dpi_unbind(struct device *dev, struct device *master, ...@@ -623,10 +613,8 @@ static void mtk_dpi_unbind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct mtk_dpi *dpi = dev_get_drvdata(dev); struct mtk_dpi *dpi = dev_get_drvdata(dev);
struct drm_device *drm_dev = data;
drm_encoder_cleanup(&dpi->encoder); drm_encoder_cleanup(&dpi->encoder);
mtk_ddp_comp_unregister(drm_dev, &dpi->ddp_comp);
} }
static const struct component_ops mtk_dpi_component_ops = { static const struct component_ops mtk_dpi_component_ops = {
...@@ -687,7 +675,6 @@ static int mtk_dpi_probe(struct platform_device *pdev) ...@@ -687,7 +675,6 @@ static int mtk_dpi_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct mtk_dpi *dpi; struct mtk_dpi *dpi;
struct resource *mem; struct resource *mem;
int comp_id;
int ret; int ret;
dpi = devm_kzalloc(dev, sizeof(*dpi), GFP_KERNEL); dpi = devm_kzalloc(dev, sizeof(*dpi), GFP_KERNEL);
...@@ -765,18 +752,6 @@ static int mtk_dpi_probe(struct platform_device *pdev) ...@@ -765,18 +752,6 @@ static int mtk_dpi_probe(struct platform_device *pdev)
dev_info(dev, "Found bridge node: %pOF\n", dpi->next_bridge->of_node); dev_info(dev, "Found bridge node: %pOF\n", dpi->next_bridge->of_node);
comp_id = mtk_ddp_comp_get_id(dev->of_node, MTK_DPI);
if (comp_id < 0) {
dev_err(dev, "Failed to identify by alias: %d\n", comp_id);
return comp_id;
}
ret = mtk_ddp_comp_init(dev->of_node, &dpi->ddp_comp, comp_id);
if (ret) {
dev_err(dev, "Failed to initialize component: %d\n", ret);
return ret;
}
platform_set_drvdata(pdev, dpi); platform_set_drvdata(pdev, dpi);
dpi->bridge.funcs = &mtk_dpi_bridge_funcs; dpi->bridge.funcs = &mtk_dpi_bridge_funcs;
......
...@@ -786,7 +786,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, ...@@ -786,7 +786,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
struct device_node *node; struct device_node *node;
node = priv->comp_node[comp_id]; node = priv->comp_node[comp_id];
comp = priv->ddp_comp[comp_id]; comp = &priv->ddp_comp[comp_id];
if (!comp) { if (!comp) {
dev_err(dev, "Component %pOF not initialized\n", node); dev_err(dev, "Component %pOF not initialized\n", node);
ret = -ENODEV; ret = -ENODEV;
......
...@@ -524,9 +524,10 @@ static const struct mtk_ddp_comp_match mtk_ddp_matches[DDP_COMPONENT_ID_MAX] = { ...@@ -524,9 +524,10 @@ static const struct mtk_ddp_comp_match mtk_ddp_matches[DDP_COMPONENT_ID_MAX] = {
[DDP_COMPONENT_WDMA1] = { MTK_DISP_WDMA, 1, NULL }, [DDP_COMPONENT_WDMA1] = { MTK_DISP_WDMA, 1, NULL },
}; };
static bool mtk_drm_find_comp_in_ddp(struct mtk_ddp_comp ddp_comp, static bool mtk_drm_find_comp_in_ddp(struct device *dev,
const enum mtk_ddp_comp_id *path, const enum mtk_ddp_comp_id *path,
unsigned int path_len) unsigned int path_len,
struct mtk_ddp_comp *ddp_comp)
{ {
unsigned int i; unsigned int i;
...@@ -534,7 +535,7 @@ static bool mtk_drm_find_comp_in_ddp(struct mtk_ddp_comp ddp_comp, ...@@ -534,7 +535,7 @@ static bool mtk_drm_find_comp_in_ddp(struct mtk_ddp_comp ddp_comp,
return false; return false;
for (i = 0U; i < path_len; i++) for (i = 0U; i < path_len; i++)
if (ddp_comp.id == path[i]) if (dev == ddp_comp[path[i]].dev)
return true; return true;
return false; return false;
...@@ -556,18 +557,19 @@ int mtk_ddp_comp_get_id(struct device_node *node, ...@@ -556,18 +557,19 @@ int mtk_ddp_comp_get_id(struct device_node *node,
} }
unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm, unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
struct mtk_ddp_comp ddp_comp) struct device *dev)
{ {
struct mtk_drm_private *private = drm->dev_private; struct mtk_drm_private *private = drm->dev_private;
unsigned int ret = 0; unsigned int ret = 0;
if (mtk_drm_find_comp_in_ddp(ddp_comp, private->data->main_path, private->data->main_len)) if (mtk_drm_find_comp_in_ddp(dev, private->data->main_path, private->data->main_len,
private->ddp_comp))
ret = BIT(0); ret = BIT(0);
else if (mtk_drm_find_comp_in_ddp(ddp_comp, private->data->ext_path, else if (mtk_drm_find_comp_in_ddp(dev, private->data->ext_path,
private->data->ext_len)) private->data->ext_len, private->ddp_comp))
ret = BIT(1); ret = BIT(1);
else if (mtk_drm_find_comp_in_ddp(ddp_comp, private->data->third_path, else if (mtk_drm_find_comp_in_ddp(dev, private->data->third_path,
private->data->third_len)) private->data->third_len, private->ddp_comp))
ret = BIT(2); ret = BIT(2);
else else
DRM_INFO("Failed to find comp in ddp table\n"); DRM_INFO("Failed to find comp in ddp table\n");
...@@ -660,21 +662,3 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp, ...@@ -660,21 +662,3 @@ int mtk_ddp_comp_init(struct device_node *node, struct mtk_ddp_comp *comp,
return 0; return 0;
} }
int mtk_ddp_comp_register(struct drm_device *drm, struct mtk_ddp_comp *comp)
{
struct mtk_drm_private *private = drm->dev_private;
if (private->ddp_comp[comp->id])
return -EBUSY;
private->ddp_comp[comp->id] = comp;
return 0;
}
void mtk_ddp_comp_unregister(struct drm_device *drm, struct mtk_ddp_comp *comp)
{
struct mtk_drm_private *private = drm->dev_private;
private->ddp_comp[comp->id] = NULL;
}
...@@ -188,11 +188,9 @@ static inline void mtk_ddp_ctm_set(struct mtk_ddp_comp *comp, ...@@ -188,11 +188,9 @@ static inline void mtk_ddp_ctm_set(struct mtk_ddp_comp *comp,
int mtk_ddp_comp_get_id(struct device_node *node, int mtk_ddp_comp_get_id(struct device_node *node,
enum mtk_ddp_comp_type comp_type); enum mtk_ddp_comp_type comp_type);
unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm, unsigned int mtk_drm_find_possible_crtc_by_comp(struct drm_device *drm,
struct mtk_ddp_comp ddp_comp); struct device *dev);
int mtk_ddp_comp_init(struct device_node *comp_node, struct mtk_ddp_comp *comp, int mtk_ddp_comp_init(struct device_node *comp_node, struct mtk_ddp_comp *comp,
enum mtk_ddp_comp_id comp_id); enum mtk_ddp_comp_id comp_id);
int mtk_ddp_comp_register(struct drm_device *drm, struct mtk_ddp_comp *comp);
void mtk_ddp_comp_unregister(struct drm_device *drm, struct mtk_ddp_comp *comp);
enum mtk_ddp_comp_type mtk_ddp_comp_get_type(enum mtk_ddp_comp_id comp_id); enum mtk_ddp_comp_type mtk_ddp_comp_get_type(enum mtk_ddp_comp_id comp_id);
void mtk_ddp_write(struct cmdq_pkt *cmdq_pkt, unsigned int value, void mtk_ddp_write(struct cmdq_pkt *cmdq_pkt, unsigned int value,
struct cmdq_client_reg *cmdq_reg, void __iomem *regs, struct cmdq_client_reg *cmdq_reg, void __iomem *regs,
......
...@@ -502,24 +502,13 @@ static int mtk_drm_probe(struct platform_device *pdev) ...@@ -502,24 +502,13 @@ static int mtk_drm_probe(struct platform_device *pdev)
node); node);
drm_of_component_match_add(dev, &match, compare_of, drm_of_component_match_add(dev, &match, compare_of,
node); node);
} else {
struct mtk_ddp_comp *comp;
comp = devm_kzalloc(dev, sizeof(*comp), GFP_KERNEL);
if (!comp) {
ret = -ENOMEM;
of_node_put(node);
goto err_node;
} }
ret = mtk_ddp_comp_init(node, comp, comp_id); ret = mtk_ddp_comp_init(node, &private->ddp_comp[comp_id], comp_id);
if (ret) { if (ret) {
of_node_put(node); of_node_put(node);
goto err_node; goto err_node;
} }
private->ddp_comp[comp_id] = comp;
}
} }
if (!private->mutex_node) { if (!private->mutex_node) {
...@@ -544,10 +533,8 @@ static int mtk_drm_probe(struct platform_device *pdev) ...@@ -544,10 +533,8 @@ static int mtk_drm_probe(struct platform_device *pdev)
of_node_put(private->mutex_node); of_node_put(private->mutex_node);
for (i = 0; i < DDP_COMPONENT_ID_MAX; i++) { for (i = 0; i < DDP_COMPONENT_ID_MAX; i++) {
of_node_put(private->comp_node[i]); of_node_put(private->comp_node[i]);
if (private->ddp_comp[i]) { if (private->ddp_comp[i].larb_dev)
put_device(private->ddp_comp[i]->larb_dev); put_device(private->ddp_comp[i].larb_dev);
private->ddp_comp[i] = NULL;
}
} }
return ret; return ret;
} }
......
...@@ -41,7 +41,7 @@ struct mtk_drm_private { ...@@ -41,7 +41,7 @@ struct mtk_drm_private {
struct device *mutex_dev; struct device *mutex_dev;
struct device *mmsys_dev; struct device *mmsys_dev;
struct device_node *comp_node[DDP_COMPONENT_ID_MAX]; struct device_node *comp_node[DDP_COMPONENT_ID_MAX];
struct mtk_ddp_comp *ddp_comp[DDP_COMPONENT_ID_MAX]; struct mtk_ddp_comp ddp_comp[DDP_COMPONENT_ID_MAX];
const struct mtk_mmsys_driver_data *data; const struct mtk_mmsys_driver_data *data;
struct drm_atomic_state *suspend_state; struct drm_atomic_state *suspend_state;
}; };
......
...@@ -179,7 +179,6 @@ struct mtk_dsi_driver_data { ...@@ -179,7 +179,6 @@ struct mtk_dsi_driver_data {
}; };
struct mtk_dsi { struct mtk_dsi {
struct mtk_ddp_comp ddp_comp;
struct device *dev; struct device *dev;
struct mipi_dsi_host host; struct mipi_dsi_host host;
struct drm_encoder encoder; struct drm_encoder encoder;
...@@ -948,7 +947,7 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) ...@@ -948,7 +947,7 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi)
return ret; return ret;
} }
dsi->encoder.possible_crtcs = mtk_drm_find_possible_crtc_by_comp(drm, dsi->ddp_comp); dsi->encoder.possible_crtcs = mtk_drm_find_possible_crtc_by_comp(drm, dsi->host.dev);
ret = drm_bridge_attach(&dsi->encoder, &dsi->bridge, NULL, ret = drm_bridge_attach(&dsi->encoder, &dsi->bridge, NULL,
DRM_BRIDGE_ATTACH_NO_CONNECTOR); DRM_BRIDGE_ATTACH_NO_CONNECTOR);
...@@ -976,32 +975,17 @@ static int mtk_dsi_bind(struct device *dev, struct device *master, void *data) ...@@ -976,32 +975,17 @@ static int mtk_dsi_bind(struct device *dev, struct device *master, void *data)
struct drm_device *drm = data; struct drm_device *drm = data;
struct mtk_dsi *dsi = dev_get_drvdata(dev); struct mtk_dsi *dsi = dev_get_drvdata(dev);
ret = mtk_ddp_comp_register(drm, &dsi->ddp_comp);
if (ret < 0) {
dev_err(dev, "Failed to register component %pOF: %d\n",
dev->of_node, ret);
return ret;
}
ret = mtk_dsi_encoder_init(drm, dsi); ret = mtk_dsi_encoder_init(drm, dsi);
if (ret)
goto err_unregister;
return 0;
err_unregister:
mtk_ddp_comp_unregister(drm, &dsi->ddp_comp);
return ret; return ret;
} }
static void mtk_dsi_unbind(struct device *dev, struct device *master, static void mtk_dsi_unbind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct drm_device *drm = data;
struct mtk_dsi *dsi = dev_get_drvdata(dev); struct mtk_dsi *dsi = dev_get_drvdata(dev);
drm_encoder_cleanup(&dsi->encoder); drm_encoder_cleanup(&dsi->encoder);
mtk_ddp_comp_unregister(drm, &dsi->ddp_comp);
} }
static const struct component_ops mtk_dsi_component_ops = { static const struct component_ops mtk_dsi_component_ops = {
...@@ -1016,7 +1000,6 @@ static int mtk_dsi_probe(struct platform_device *pdev) ...@@ -1016,7 +1000,6 @@ static int mtk_dsi_probe(struct platform_device *pdev)
struct drm_panel *panel; struct drm_panel *panel;
struct resource *regs; struct resource *regs;
int irq_num; int irq_num;
int comp_id;
int ret; int ret;
dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL); dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL);
...@@ -1086,19 +1069,6 @@ static int mtk_dsi_probe(struct platform_device *pdev) ...@@ -1086,19 +1069,6 @@ static int mtk_dsi_probe(struct platform_device *pdev)
goto err_unregister_host; goto err_unregister_host;
} }
comp_id = mtk_ddp_comp_get_id(dev->of_node, MTK_DSI);
if (comp_id < 0) {
dev_err(dev, "Failed to identify by alias: %d\n", comp_id);
ret = comp_id;
goto err_unregister_host;
}
ret = mtk_ddp_comp_init(dev->of_node, &dsi->ddp_comp, comp_id);
if (ret) {
dev_err(dev, "Failed to initialize component: %d\n", ret);
goto err_unregister_host;
}
irq_num = platform_get_irq(pdev, 0); irq_num = platform_get_irq(pdev, 0);
if (irq_num < 0) { if (irq_num < 0) {
dev_err(&pdev->dev, "failed to get dsi irq_num: %d\n", irq_num); dev_err(&pdev->dev, "failed to get dsi irq_num: %d\n", irq_num);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment