Re: [PATCH v3 2/2] display/drm/bridge: TC358775 DSI/LVDS driver

2020-06-20 Thread Sam Ravnborg
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

2020-06-19 Thread kernel test robot
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

2020-06-19 Thread kernel test robot
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