From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bibby Hsieh Subject: Re: [PATCH 3/4] drm/mediatek: fix the wrong pixel clock when resolution is 4K Date: Mon, 25 Jul 2016 16:37:50 +0800 Message-ID: <1469435870.26205.20.camel@mtksdaap41> References: <1468987385-37353-1-git-send-email-bibby.hsieh@mediatek.com> <1468987385-37353-4-git-send-email-bibby.hsieh@mediatek.com> <1469001443.11841.59.camel@mtksdaap41> <1469427845.26205.17.camel@mtksdaap41> <1469429375.11841.69.camel@mtksdaap41> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1469429375.11841.69.camel@mtksdaap41> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: CK Hu Cc: Junzhi Zhao , linux-kernel@vger.kernel.org, Sascha Hauer , Daniel Vetter , Cawa Cheng , dri-devel@lists.freedesktop.org, Mao Huang , linux-mediatek@lists.infradead.org, Matthias Brugger , Yingjoe Chen , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org SGksIENLLAoKVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLgoKT24gTW9uLCAyMDE2LTA3LTI1IGF0 IDE0OjQ5ICswODAwLCBDSyBIdSB3cm90ZToKPiBIaSwgQmliYnk6Cj4gCj4gT24gTW9uLCAyMDE2 LTA3LTI1IGF0IDE0OjI0ICswODAwLCBCaWJieSBIc2llaCB3cm90ZToKPiA+IEhpLCBDSywKPiA+ IAo+ID4gVGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzLgo+ID4gCj4gPiBPbiBXZWQsIDIwMTYtMDct MjAgYXQgMTU6NTcgKzA4MDAsIENLIEh1IHdyb3RlOgo+ID4gPiBIaSwgQmliYnk6Cj4gPiA+IAo+ ID4gPiBTb21lIGNvbW1lbnRzIGlubGluZS4KPiA+ID4gCj4gPiA+IE9uIFdlZCwgMjAxNi0wNy0y MCBhdCAxMjowMyArMDgwMCwgQmliYnkgSHNpZWggd3JvdGU6Cj4gPiA+ID4gRnJvbTogSnVuemhp IFpoYW8gPGp1bnpoaS56aGFvQG1lZGlhdGVrLmNvbT4KPiA+ID4gPiAKPiA+ID4gPiBQaXhlbCBj bG9jayBzaG91bGQgYmUgMjk3TUh6IHdoZW4gcmVzb2x1dGlvbiBpcyA0Sy4KPiA+ID4gPiAKPiA+ ID4gPiBTaWduZWQtb2ZmLWJ5OiBKdW56aGkgWmhhbyA8anVuemhpLnpoYW9AbWVkaWF0ZWsuY29t Pgo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5oc2llaEBtZWRpYXRl ay5jb20+Cj4gPiA+ID4gLS0tCj4gPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHBpLmMgfCAgMTg0ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLQo+ID4gPiA+ ICAxIGZpbGUgY2hhbmdlZCwgMTMxIGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQo+ID4g PiA+IAo+IAo+IFtzbmlwLi4uXQo+IAo+ID4gPiA+ICAKPiA+ID4gPiArc3RhdGljIGludCBtdDgx NzNfcGFyc2VfY2xrX2Zyb21fZHQoc3RydWN0IG10a19kcGkgKmRwaSwgc3RydWN0IGRldmljZV9u b2RlICpucCkKPiA+ID4gPiArewo+ID4gPiA+ICsJaW50IGk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsJ Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2RwaV9jbGtfbmFtZXMpOyBpKyspIHsKPiA+ ID4gPiArCQlkcGktPmNsa1tpXSA9IG9mX2Nsa19nZXRfYnlfbmFtZShucCwKPiA+ID4gPiArCQkJ CQkJICBtdGtfZHBpX2Nsa19uYW1lc1tpXSk7Cj4gPiA+ID4gKwkJaWYgKElTX0VSUihkcGktPmNs a1tpXSkpCj4gPiA+ID4gKwkJCXJldHVybiBQVFJfRVJSKGRwaS0+Y2xrW2ldKTsKPiA+ID4gPiAr CX0KPiA+ID4gPiArCXJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+IAo+ID4gPiBJIHRoaW5rIHBh cnNpbmcgZGV2aWNlIHRyZWUgaXMgYSBwdXJlIFNXIGJlaGF2aW9yLiBXb3VsZCB0aGlzIHZhcnkg Zm9yCj4gPiA+IGRpZmZlcmVudCBNVEsgc29jPwo+ID4gPiAKPiA+IFllcwo+IAo+IEkgY2FuIG5v dCBpbWFnaW5nIHRoYXQsIHNvIGNvdWxkIHlvdSBnaXZlIG1lIGFuIGV4YW1wbGUgc291cmNlIGNv ZGUgb2YKPiBvdGhlciBNVEsgc29jIGZvciBwYXJzZV9jbGtfZnJvbV9kdCgpPwo+IApJIHdpbGwg ZG8gc29tZSBjaGFuZ2VzIGFjY29yZGluZyB0byB5b3VyIGNvbW1lbnRzLiAKCj4gPiA+ID4gKwo+ ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZHBpX2NvbmYgbXQ4MTcz X2NvbmYgPSB7Cj4gPiA+ID4gKwkucGFyc2VfY2xrX2Zyb21fZHQgPSBtdDgxNzNfcGFyc2VfY2xr X2Zyb21fZHQsCj4gPiA+ID4gKwkuY2xrX2NvbmZpZyA9IG10ODE3M19jbGtfY29uZmlnLAo+ID4g PiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgbXRrX2RwaV9vZl9pZHNbXSA9IHsKPiA+ID4gPiArCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0 ZWssbXQ4MTczLWRwaSIsCj4gPiA+ID4gKwkJLmRhdGEgPSAmbXQ4MTczX2NvbmYsCj4gPiA+ID4g Kwl9LAo+ID4gPiA+ICsJe30KPiA+ID4gPiArfTsKPiA+ID4gPiArCj4gPiA+ID4gIHN0YXRpYyBp bnQgbXRrX2RwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiA+ICB7 Cj4gPiA+ID4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ID4gPiA+ICAJc3Ry dWN0IG10a19kcGkgKmRwaTsKPiA+ID4gPiAgCXN0cnVjdCByZXNvdXJjZSAqbWVtOwo+ID4gPiA+ ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKPiA+ID4gPiAgCXN0cnVj dCBkZXZpY2Vfbm9kZSAqZXAsICpicmlkZ2Vfbm9kZSA9IE5VTEw7Cj4gPiA+ID4gIAlpbnQgY29t cF9pZDsKPiA+ID4gPiArCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwo+ID4gPiA+ ICsJc3RydWN0IG10a19kcGlfY29uZiAqY29uZjsKPiA+ID4gPiAgCWludCByZXQ7Cj4gPiA+ID4g IAo+ID4gPiA+ICsJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKG10a19kcGlfb2ZfaWRzLCBkZXYtPm9m X25vZGUpOwo+ID4gPiA+ICsJaWYgKCFtYXRjaCkKPiA+ID4gPiArCQlyZXR1cm4gLUVOT0RFVjsK PiA+ID4gPiArCj4gPiA+ID4gIAlkcGkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRwaSks IEdGUF9LRVJORUwpOwo+ID4gPiA+ICAJaWYgKCFkcGkpCj4gPiA+ID4gIAkJcmV0dXJuIC1FTk9N RU07Cj4gPiA+ID4gIAo+ID4gPiA+ICAJZHBpLT5kZXYgPSBkZXY7Cj4gPiA+ID4gKwlkcGktPmRh dGEgPSAodm9pZCAqKW1hdGNoLT5kYXRhOwo+ID4gPiA+ICsJY29uZiA9IChzdHJ1Y3QgbXRrX2Rw aV9jb25mICopbWF0Y2gtPmRhdGE7Cj4gPiA+ID4gIAo+ID4gPiA+ICAJbWVtID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiA+ID4gPiAgCWRwaS0+cmVn cyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7Cj4gPiA+ID4gQEAgLTY3OSwyNCAr Nzc3LDkgQEAgc3RhdGljIGludCBtdGtfZHBpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCj4gPiA+ID4gIAkJcmV0dXJuIHJldDsKPiA+ID4gPiAgCX0KPiA+ID4gPiAgCj4gPiA+ ID4gLQlkcGktPmVuZ2luZV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZW5naW5lIik7Cj4gPiA+ ID4gLQlpZiAoSVNfRVJSKGRwaS0+ZW5naW5lX2NsaykpIHsKPiA+ID4gPiAtCQlyZXQgPSBQVFJf RVJSKGRwaS0+ZW5naW5lX2Nsayk7Cj4gPiA+ID4gLQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g Z2V0IGVuZ2luZSBjbG9jazogJWRcbiIsIHJldCk7Cj4gPiA+ID4gLQkJcmV0dXJuIHJldDsKPiA+ ID4gPiAtCX0KPiA+ID4gPiAtCj4gPiA+ID4gLQlkcGktPnBpeGVsX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJwaXhlbCIpOwo+ID4gPiA+IC0JaWYgKElTX0VSUihkcGktPnBpeGVsX2NsaykpIHsK PiA+ID4gPiAtCQlyZXQgPSBQVFJfRVJSKGRwaS0+cGl4ZWxfY2xrKTsKPiA+ID4gPiAtCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcGl4ZWwgY2xvY2s6ICVkXG4iLCByZXQpOwo+ID4gPiA+ IC0JCXJldHVybiByZXQ7Cj4gPiA+ID4gLQl9Cj4gPiA+ID4gLQo+ID4gPiA+IC0JZHBpLT50dmRf Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBsbCIpOwo+ID4gPiA+IC0JaWYgKElTX0VSUihkcGkt PnR2ZF9jbGspKSB7Cj4gPiA+ID4gLQkJcmV0ID0gUFRSX0VSUihkcGktPnR2ZF9jbGspOwo+ID4g PiA+IC0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCB0dmRwbGwgY2xvY2s6ICVkXG4iLCBy ZXQpOwo+ID4gPiA+ICsJcmV0ID0gY29uZi0+cGFyc2VfY2xrX2Zyb21fZHQoZHBpLCBucCk7Cj4g PiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ID4gKwkJZGV2X2VycihkZXYsICJwYXJzZSB0dmQgZGl2 IGNsayBmYWlsZWQhIik7Cj4gPiA+ID4gIAkJcmV0dXJuIHJldDsKPiA+ID4gPiAgCX0KPiA+ID4g PiAgCj4gPiA+ID4gQEAgLTc1NCwxMSArODM3LDYgQEAgc3RhdGljIGludCBtdGtfZHBpX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiA+ICAJcmV0dXJuIDA7Cj4gPiA+ ID4gIH0KPiA+ID4gPiAgCj4gPiA+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk IG10a19kcGlfb2ZfaWRzW10gPSB7Cj4gPiA+ID4gLQl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10ODE3My1kcGkiLCB9LAo+ID4gPiA+IC0Je30KPiA+ID4gPiAtfTsKPiA+ID4gPiAtCj4gPiA+ ID4gIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RwaV9kcml2ZXIgPSB7Cj4gPiA+ID4gIAku cHJvYmUgPSBtdGtfZHBpX3Byb2JlLAo+ID4gPiA+ICAJLnJlbW92ZSA9IG10a19kcGlfcmVtb3Zl LAo+ID4gPiAKPiA+ID4gUmVnYXJkcywKPiA+ID4gQ0sKPiA+ID4gCj4gPiAKPiAKPiAKPiBSZWdh cmRzLAo+IENLCj4gPiAKPiAKPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: bibby.hsieh@mediatek.com (Bibby Hsieh) Date: Mon, 25 Jul 2016 16:37:50 +0800 Subject: [PATCH 3/4] drm/mediatek: fix the wrong pixel clock when resolution is 4K In-Reply-To: <1469429375.11841.69.camel@mtksdaap41> References: <1468987385-37353-1-git-send-email-bibby.hsieh@mediatek.com> <1468987385-37353-4-git-send-email-bibby.hsieh@mediatek.com> <1469001443.11841.59.camel@mtksdaap41> <1469427845.26205.17.camel@mtksdaap41> <1469429375.11841.69.camel@mtksdaap41> Message-ID: <1469435870.26205.20.camel@mtksdaap41> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi, CK, Thanks for your comments. On Mon, 2016-07-25 at 14:49 +0800, CK Hu wrote: > Hi, Bibby: > > On Mon, 2016-07-25 at 14:24 +0800, Bibby Hsieh wrote: > > Hi, CK, > > > > Thanks for your comments. > > > > On Wed, 2016-07-20 at 15:57 +0800, CK Hu wrote: > > > Hi, Bibby: > > > > > > Some comments inline. > > > > > > On Wed, 2016-07-20 at 12:03 +0800, Bibby Hsieh wrote: > > > > From: Junzhi Zhao > > > > > > > > Pixel clock should be 297MHz when resolution is 4K. > > > > > > > > Signed-off-by: Junzhi Zhao > > > > Signed-off-by: Bibby Hsieh > > > > --- > > > > drivers/gpu/drm/mediatek/mtk_dpi.c | 184 +++++++++++++++++++++++++----------- > > > > 1 file changed, 131 insertions(+), 53 deletions(-) > > > > > > [snip...] > > > > > > > > > +static int mt8173_parse_clk_from_dt(struct mtk_dpi *dpi, struct device_node *np) > > > > +{ > > > > + int i; > > > > + > > > > + for (i = 0; i < ARRAY_SIZE(mtk_dpi_clk_names); i++) { > > > > + dpi->clk[i] = of_clk_get_by_name(np, > > > > + mtk_dpi_clk_names[i]); > > > > + if (IS_ERR(dpi->clk[i])) > > > > + return PTR_ERR(dpi->clk[i]); > > > > + } > > > > + return 0; > > > > +} > > > > > > I think parsing device tree is a pure SW behavior. Would this vary for > > > different MTK soc? > > > > > Yes > > I can not imaging that, so could you give me an example source code of > other MTK soc for parse_clk_from_dt()? > I will do some changes according to your comments. > > > > + > > > > + > > > > +static const struct mtk_dpi_conf mt8173_conf = { > > > > + .parse_clk_from_dt = mt8173_parse_clk_from_dt, > > > > + .clk_config = mt8173_clk_config, > > > > +}; > > > > + > > > > +static const struct of_device_id mtk_dpi_of_ids[] = { > > > > + { .compatible = "mediatek,mt8173-dpi", > > > > + .data = &mt8173_conf, > > > > + }, > > > > + {} > > > > +}; > > > > + > > > > static int mtk_dpi_probe(struct platform_device *pdev) > > > > { > > > > struct device *dev = &pdev->dev; > > > > struct mtk_dpi *dpi; > > > > struct resource *mem; > > > > + struct device_node *np = dev->of_node; > > > > struct device_node *ep, *bridge_node = NULL; > > > > int comp_id; > > > > + const struct of_device_id *match; > > > > + struct mtk_dpi_conf *conf; > > > > int ret; > > > > > > > > + match = of_match_node(mtk_dpi_of_ids, dev->of_node); > > > > + if (!match) > > > > + return -ENODEV; > > > > + > > > > dpi = devm_kzalloc(dev, sizeof(*dpi), GFP_KERNEL); > > > > if (!dpi) > > > > return -ENOMEM; > > > > > > > > dpi->dev = dev; > > > > + dpi->data = (void *)match->data; > > > > + conf = (struct mtk_dpi_conf *)match->data; > > > > > > > > mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > > > dpi->regs = devm_ioremap_resource(dev, mem); > > > > @@ -679,24 +777,9 @@ static int mtk_dpi_probe(struct platform_device *pdev) > > > > return ret; > > > > } > > > > > > > > - dpi->engine_clk = devm_clk_get(dev, "engine"); > > > > - if (IS_ERR(dpi->engine_clk)) { > > > > - ret = PTR_ERR(dpi->engine_clk); > > > > - dev_err(dev, "Failed to get engine clock: %d\n", ret); > > > > - return ret; > > > > - } > > > > - > > > > - dpi->pixel_clk = devm_clk_get(dev, "pixel"); > > > > - if (IS_ERR(dpi->pixel_clk)) { > > > > - ret = PTR_ERR(dpi->pixel_clk); > > > > - dev_err(dev, "Failed to get pixel clock: %d\n", ret); > > > > - return ret; > > > > - } > > > > - > > > > - dpi->tvd_clk = devm_clk_get(dev, "pll"); > > > > - if (IS_ERR(dpi->tvd_clk)) { > > > > - ret = PTR_ERR(dpi->tvd_clk); > > > > - dev_err(dev, "Failed to get tvdpll clock: %d\n", ret); > > > > + ret = conf->parse_clk_from_dt(dpi, np); > > > > + if (ret) { > > > > + dev_err(dev, "parse tvd div clk failed!"); > > > > return ret; > > > > } > > > > > > > > @@ -754,11 +837,6 @@ static int mtk_dpi_remove(struct platform_device *pdev) > > > > return 0; > > > > } > > > > > > > > -static const struct of_device_id mtk_dpi_of_ids[] = { > > > > - { .compatible = "mediatek,mt8173-dpi", }, > > > > - {} > > > > -}; > > > > - > > > > struct platform_driver mtk_dpi_driver = { > > > > .probe = mtk_dpi_probe, > > > > .remove = mtk_dpi_remove, > > > > > > Regards, > > > CK > > > > > > > > Regards, > CK > > > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752952AbcGYIiI (ORCPT ); Mon, 25 Jul 2016 04:38:08 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:10331 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1752907AbcGYIh6 (ORCPT ); Mon, 25 Jul 2016 04:37:58 -0400 Message-ID: <1469435870.26205.20.camel@mtksdaap41> Subject: Re: [PATCH 3/4] drm/mediatek: fix the wrong pixel clock when resolution is 4K From: Bibby Hsieh To: CK Hu CC: David Airlie , Matthias Brugger , Daniel Vetter , , , Yingjoe Chen , Cawa Cheng , Daniel Kurtz , "Philipp Zabel" , YT Shen , "Thierry Reding" , Mao Huang , , , "Sascha Hauer" , Junzhi Zhao Date: Mon, 25 Jul 2016 16:37:50 +0800 In-Reply-To: <1469429375.11841.69.camel@mtksdaap41> References: <1468987385-37353-1-git-send-email-bibby.hsieh@mediatek.com> <1468987385-37353-4-git-send-email-bibby.hsieh@mediatek.com> <1469001443.11841.59.camel@mtksdaap41> <1469427845.26205.17.camel@mtksdaap41> <1469429375.11841.69.camel@mtksdaap41> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 Content-Transfer-Encoding: 7bit MIME-Version: 1.0 X-MTK: N Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, CK, Thanks for your comments. On Mon, 2016-07-25 at 14:49 +0800, CK Hu wrote: > Hi, Bibby: > > On Mon, 2016-07-25 at 14:24 +0800, Bibby Hsieh wrote: > > Hi, CK, > > > > Thanks for your comments. > > > > On Wed, 2016-07-20 at 15:57 +0800, CK Hu wrote: > > > Hi, Bibby: > > > > > > Some comments inline. > > > > > > On Wed, 2016-07-20 at 12:03 +0800, Bibby Hsieh wrote: > > > > From: Junzhi Zhao > > > > > > > > Pixel clock should be 297MHz when resolution is 4K. > > > > > > > > Signed-off-by: Junzhi Zhao > > > > Signed-off-by: Bibby Hsieh > > > > --- > > > > drivers/gpu/drm/mediatek/mtk_dpi.c | 184 +++++++++++++++++++++++++----------- > > > > 1 file changed, 131 insertions(+), 53 deletions(-) > > > > > > [snip...] > > > > > > > > > +static int mt8173_parse_clk_from_dt(struct mtk_dpi *dpi, struct device_node *np) > > > > +{ > > > > + int i; > > > > + > > > > + for (i = 0; i < ARRAY_SIZE(mtk_dpi_clk_names); i++) { > > > > + dpi->clk[i] = of_clk_get_by_name(np, > > > > + mtk_dpi_clk_names[i]); > > > > + if (IS_ERR(dpi->clk[i])) > > > > + return PTR_ERR(dpi->clk[i]); > > > > + } > > > > + return 0; > > > > +} > > > > > > I think parsing device tree is a pure SW behavior. Would this vary for > > > different MTK soc? > > > > > Yes > > I can not imaging that, so could you give me an example source code of > other MTK soc for parse_clk_from_dt()? > I will do some changes according to your comments. > > > > + > > > > + > > > > +static const struct mtk_dpi_conf mt8173_conf = { > > > > + .parse_clk_from_dt = mt8173_parse_clk_from_dt, > > > > + .clk_config = mt8173_clk_config, > > > > +}; > > > > + > > > > +static const struct of_device_id mtk_dpi_of_ids[] = { > > > > + { .compatible = "mediatek,mt8173-dpi", > > > > + .data = &mt8173_conf, > > > > + }, > > > > + {} > > > > +}; > > > > + > > > > static int mtk_dpi_probe(struct platform_device *pdev) > > > > { > > > > struct device *dev = &pdev->dev; > > > > struct mtk_dpi *dpi; > > > > struct resource *mem; > > > > + struct device_node *np = dev->of_node; > > > > struct device_node *ep, *bridge_node = NULL; > > > > int comp_id; > > > > + const struct of_device_id *match; > > > > + struct mtk_dpi_conf *conf; > > > > int ret; > > > > > > > > + match = of_match_node(mtk_dpi_of_ids, dev->of_node); > > > > + if (!match) > > > > + return -ENODEV; > > > > + > > > > dpi = devm_kzalloc(dev, sizeof(*dpi), GFP_KERNEL); > > > > if (!dpi) > > > > return -ENOMEM; > > > > > > > > dpi->dev = dev; > > > > + dpi->data = (void *)match->data; > > > > + conf = (struct mtk_dpi_conf *)match->data; > > > > > > > > mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > > > dpi->regs = devm_ioremap_resource(dev, mem); > > > > @@ -679,24 +777,9 @@ static int mtk_dpi_probe(struct platform_device *pdev) > > > > return ret; > > > > } > > > > > > > > - dpi->engine_clk = devm_clk_get(dev, "engine"); > > > > - if (IS_ERR(dpi->engine_clk)) { > > > > - ret = PTR_ERR(dpi->engine_clk); > > > > - dev_err(dev, "Failed to get engine clock: %d\n", ret); > > > > - return ret; > > > > - } > > > > - > > > > - dpi->pixel_clk = devm_clk_get(dev, "pixel"); > > > > - if (IS_ERR(dpi->pixel_clk)) { > > > > - ret = PTR_ERR(dpi->pixel_clk); > > > > - dev_err(dev, "Failed to get pixel clock: %d\n", ret); > > > > - return ret; > > > > - } > > > > - > > > > - dpi->tvd_clk = devm_clk_get(dev, "pll"); > > > > - if (IS_ERR(dpi->tvd_clk)) { > > > > - ret = PTR_ERR(dpi->tvd_clk); > > > > - dev_err(dev, "Failed to get tvdpll clock: %d\n", ret); > > > > + ret = conf->parse_clk_from_dt(dpi, np); > > > > + if (ret) { > > > > + dev_err(dev, "parse tvd div clk failed!"); > > > > return ret; > > > > } > > > > > > > > @@ -754,11 +837,6 @@ static int mtk_dpi_remove(struct platform_device *pdev) > > > > return 0; > > > > } > > > > > > > > -static const struct of_device_id mtk_dpi_of_ids[] = { > > > > - { .compatible = "mediatek,mt8173-dpi", }, > > > > - {} > > > > -}; > > > > - > > > > struct platform_driver mtk_dpi_driver = { > > > > .probe = mtk_dpi_probe, > > > > .remove = mtk_dpi_remove, > > > > > > Regards, > > > CK > > > > > > > > Regards, > CK > > > >