Re: [PATCH v3 2/2] display/drm/bridge: TC358775 DSI/LVDS driver
Hi Vinay. > + > +static int tc_probe(struct i2c_client *client, const struct i2c_device_id > *id) > +{ > + struct device *dev = >dev; > + struct drm_panel *panel; > + struct tc_data *tc; > + int ret; > + > + tc = devm_kzalloc(dev, sizeof(*tc), GFP_KERNEL); > + if (!tc) > + return -ENOMEM; > + > + tc->dev = dev; > + tc->i2c = client; > + > + ret = drm_of_find_panel_or_bridge(dev->of_node, TC358775_LVDS_OUT0, > + 0, , NULL); > + if (ret < 0) > + return ret; > + if (!panel) > + return -ENODEV; > + > + panel->connector_type = DRM_MODE_CONNECTOR_LVDS; The panel is responsible for specifying the connector_type. It is wrong to let users of panel set it. Fix the panel and not the bridge driver. > + > + tc->panel_bridge = devm_drm_panel_bridge_add(dev, panel); > + if (IS_ERR(tc->panel_bridge)) > + return PTR_ERR(tc->panel_bridge); > + > + ret = tc358775_parse_dt(dev->of_node, tc); > + if (ret) > + return ret; > + > + tc->vddio = devm_regulator_get(dev, "vddio-supply"); > + if (IS_ERR(tc->vddio)) { > + ret = PTR_ERR(tc->vddio); > + dev_err(dev, "vddio-supply not found\n"); > + return ret; > + } > + > + tc->vdd = devm_regulator_get(dev, "vdd-supply"); > + if (IS_ERR(tc->vdd)) { > + ret = PTR_ERR(tc->vddio); > + dev_err(dev, "vdd-supply not found\n"); > + return ret; > + } > + > + tc->stby_gpio = devm_gpiod_get(dev, "stby", GPIOD_OUT_HIGH); > + if (IS_ERR(tc->stby_gpio)) { > + ret = PTR_ERR(tc->stby_gpio); > + dev_err(dev, "cannot get stby-gpio %d\n", ret); > + return ret; > + } > + > + tc->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); > + if (IS_ERR(tc->reset_gpio)) { > + ret = PTR_ERR(tc->reset_gpio); > + dev_err(dev, "cannot get reset-gpios %d\n", ret); > + return ret; > + } > + > + tc->bridge.funcs = _bridge_funcs; > + tc->bridge.of_node = dev->of_node; > + drm_bridge_add(>bridge); > + > + i2c_set_clientdata(client, tc); > + > + return 0; > +} > + Sam ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v3 2/2] display/drm/bridge: TC358775 DSI/LVDS driver
Hi Vinay, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linus/master] [also build test WARNING on v5.8-rc1 next-20200618] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Vinay-Simha-BN/dt-binding-Add-DSI-LVDS-TC358775-bridge-bindings/20200618-202234 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 1b5044021070efa3259f3e9548dc35d1eb6aa844 config: nds32-randconfig-r002-20200619 (attached as .config) compiler: nds32le-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nds32 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>, old ones prefixed by <<): >> drivers/gpu/drm/bridge/tc358775.c:505:5: warning: no previous prototype for >> 'tc358775_parse_dt' [-Wmissing-prototypes] 505 | int tc358775_parse_dt(struct device_node *np, struct tc_data *tc) | ^ vim +/tc358775_parse_dt +505 drivers/gpu/drm/bridge/tc358775.c 504 > 505 int tc358775_parse_dt(struct device_node *np, struct tc_data *tc) 506 { 507 struct device_node *endpoint; 508 struct device_node *parent; 509 struct device_node *remote; 510 struct property *prop; 511 int len; 512 513 endpoint = of_graph_get_endpoint_by_regs(tc->dev->of_node, 514 TC358775_DSI_IN, -1); 515 if (endpoint) { 516 /* dsi0_out node */ 517 parent = of_graph_get_remote_port_parent(endpoint); 518 of_node_put(endpoint); 519 if (parent) { 520 /* dsi0 port 1 */ 521 endpoint = of_graph_get_endpoint_by_regs(parent, 1, -1); 522 of_node_put(parent); 523 if (endpoint) { 524 prop = of_find_property(endpoint, "data-lanes", 525 ); 526 of_node_put(endpoint); 527 if (!prop) { 528 dev_err(tc->dev, 529 "failed to find data lane\n"); 530 return -EPROBE_DEFER; 531 } 532 } 533 } 534 } 535 536 tc->num_dsi_lanes = len / sizeof(u32); 537 538 if (tc->num_dsi_lanes < 1 || tc->num_dsi_lanes > 4) 539 return -EINVAL; 540 541 tc->host_node = of_graph_get_remote_node(np, 0, 0); 542 if (!tc->host_node) 543 return -ENODEV; 544 545 of_node_put(tc->host_node); 546 547 endpoint = of_graph_get_endpoint_by_regs(tc->dev->of_node, 548 TC358775_LVDS_OUT1, -1); 549 if (endpoint) { 550 remote = of_graph_get_remote_port_parent(endpoint); 551 of_node_put(endpoint); 552 553 if (remote) { 554 if (of_device_is_available(remote)) 555 tc->dual_link = true; 556 of_node_put(remote); 557 } 558 } 559 560 dev_dbg(tc->dev, "no.of dsi lanes: %d\n", tc->num_dsi_lanes); 561 dev_dbg(tc->dev, "operating in %s-link mode\n", 562 tc->dual_link ? "dual" : "single"); 563 564 return 0; 565 } 566 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org .config.gz Description: application/gzip ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v3 2/2] display/drm/bridge: TC358775 DSI/LVDS driver
Hi Vinay, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linus/master] [also build test WARNING on v5.8-rc1 next-20200618] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Vinay-Simha-BN/dt-binding-Add-DSI-LVDS-TC358775-bridge-bindings/20200618-202234 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 1b5044021070efa3259f3e9548dc35d1eb6aa844 config: x86_64-randconfig-r034-20200619 (attached as .config) compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 487ca07fcc75d52755c9fe2ee05bcb3b6c44) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot All warnings (new ones prefixed by >>, old ones prefixed by <<): >> drivers/gpu/drm/bridge/tc358775.c:505:5: warning: no previous prototype for >> function 'tc358775_parse_dt' [-Wmissing-prototypes] int tc358775_parse_dt(struct device_node *np, struct tc_data *tc) ^ drivers/gpu/drm/bridge/tc358775.c:505:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int tc358775_parse_dt(struct device_node *np, struct tc_data *tc) ^ static >> drivers/gpu/drm/bridge/tc358775.c:523:8: warning: variable 'len' is used >> uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (endpoint) { ^~~~ drivers/gpu/drm/bridge/tc358775.c:536:22: note: uninitialized use occurs here tc->num_dsi_lanes = len / sizeof(u32); ^~~ drivers/gpu/drm/bridge/tc358775.c:523:4: note: remove the 'if' if its condition is always true if (endpoint) { ^~ drivers/gpu/drm/bridge/tc358775.c:519:7: warning: variable 'len' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (parent) { ^~ drivers/gpu/drm/bridge/tc358775.c:536:22: note: uninitialized use occurs here tc->num_dsi_lanes = len / sizeof(u32); ^~~ drivers/gpu/drm/bridge/tc358775.c:519:3: note: remove the 'if' if its condition is always true if (parent) { ^~~~ drivers/gpu/drm/bridge/tc358775.c:515:6: warning: variable 'len' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (endpoint) { ^~~~ drivers/gpu/drm/bridge/tc358775.c:536:22: note: uninitialized use occurs here tc->num_dsi_lanes = len / sizeof(u32); ^~~ drivers/gpu/drm/bridge/tc358775.c:515:2: note: remove the 'if' if its condition is always true if (endpoint) { ^~ drivers/gpu/drm/bridge/tc358775.c:511:9: note: initialize the variable 'len' to silence this warning int len; ^ = 0 4 warnings generated. vim +/tc358775_parse_dt +505 drivers/gpu/drm/bridge/tc358775.c 504 > 505 int tc358775_parse_dt(struct device_node *np, struct tc_data *tc) 506 { 507 struct device_node *endpoint; 508 struct device_node *parent; 509 struct device_node *remote; 510 struct property *prop; 511 int len; 512 513 endpoint = of_graph_get_endpoint_by_regs(tc->dev->of_node, 514 TC358775_DSI_IN, -1); 515 if (endpoint) { 516 /* dsi0_out node */ 517 parent = of_graph_get_remote_port_parent(endpoint); 518 of_node_put(endpoint); 519 if (parent) { 520 /* dsi0 port 1 */ 521 endpoint = of_graph_get_endpoint_by_regs(parent, 1, -1); 522 of_node_put(parent); > 523 if (endpoint) { 524 prop = of_find_property(endpoint, "data-lanes", 525 ); 526 of_node_put(endpoint); 527 if (!prop) { 528 dev_err(tc->dev, 529 "failed to find data lane\n"); 530 return -EPROBE_DEFER; 531 } 532 } 533 } 534 } 535 536 tc->num_dsi_lanes = len / sizeof(u32); 537 538 if (tc->num_dsi_lanes < 1 || tc->num_dsi_lanes > 4) 539 return -EINVAL; 540 541