Thread (21 messages) 21 messages, 4 authors, 2018-10-18

RE: [PATCH 2/4] usb: chipidea: imx: add HSIC support

From: Peter Chen <hidden>
Date: 2018-10-16 06:07:40
Also in: linux-usb

 
Hi Peter,

I love your patch! Yet something to improve:

[auto build test ERROR on peter.chen-usb/ci-for-usb-next] [also build test ERROR
on v4.19-rc8 next-20181012] [if your patch is applied to the wrong git tree, please
drop us a note to help improve the system]

url:
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com
%2F0day-ci%2Flinux%2Fcommits%2FPeter-Chen%2Fusb-chipidea-imx-add-HSIC-
support%2F20181016-
130840&amp;data=02%7C01%7Cpeter.chen%40nxp.com%7C50f2cf2d6d5341bf72
cc08d6332ba794%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C63675
2662551616821&amp;sdata=clbCGj%2BrgTz56IKDM0DVVyL3e4q79FsCv3vn%2F7
TSrQI%3D&amp;reserved=0
base:
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kernel.o
rg%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Fpeter.chen%2Fusb.git&amp;data
=02%7C01%7Cpeter.chen%40nxp.com%7C50f2cf2d6d5341bf72cc08d6332ba794
%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636752662551616821
&amp;sdata=6Bp7JvbXAsJ%2FGZCOn0VmtZQSnWUCYhgqlbG8ZrbzBoE%3D&a
mp;reserved=0 ci-for-usb-next
config: x86_64-randconfig-x017-201841 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64
Will fix it by adding #include <linux/pinctrl/consumer.h>, it is strange I did not meet this error.

Peter
All errors (new ones prefixed by >>):

   drivers/usb/chipidea/ci_hdrc_imx.c: In function 'ci_hdrc_imx_notify_event':
quoted
quoted
drivers/usb/chipidea/ci_hdrc_imx.c:261:10: error: implicit
declaration of function 'pinctrl_select_state'; did you mean
'inc_node_state'? [-Werror=implicit-function-declaration]
       ret = pinctrl_select_state(data->pinctrl,
             ^~~~~~~~~~~~~~~~~~~~
             inc_node_state
   drivers/usb/chipidea/ci_hdrc_imx.c: In function 'ci_hdrc_imx_probe':
   drivers/usb/chipidea/ci_hdrc_imx.c:317:18: error: implicit declaration of function
'devm_pinctrl_get'; did you mean 'devm_clk_get'? [-Werror=implicit-function-
declaration]
     data->pinctrl = devm_pinctrl_get(dev);
                     ^~~~~~~~~~~~~~~~
                     devm_clk_get
   drivers/usb/chipidea/ci_hdrc_imx.c:317:16: warning: assignment makes pointer
from integer without a cast [-Wint-conversion]
     data->pinctrl = devm_pinctrl_get(dev);
                   ^
quoted
quoted
drivers/usb/chipidea/ci_hdrc_imx.c:322:23: error: implicit
declaration of function 'pinctrl_lookup_state'; did you mean
'inc_node_state'? [-Werror=implicit-function-declaration]
      pinctrl_hsic_idle = pinctrl_lookup_state(data->pinctrl, "idle");
                          ^~~~~~~~~~~~~~~~~~~~
                          inc_node_state
   drivers/usb/chipidea/ci_hdrc_imx.c:322:21: warning: assignment makes pointer
from integer without a cast [-Wint-conversion]
      pinctrl_hsic_idle = pinctrl_lookup_state(data->pinctrl, "idle");
                        ^
   drivers/usb/chipidea/ci_hdrc_imx.c:338:29: warning: assignment makes pointer
from integer without a cast [-Wint-conversion]
      data->pinctrl_hsic_active = pinctrl_lookup_state(data->pinctrl,
                                ^
   cc1: some warnings being treated as errors

vim +261 drivers/usb/chipidea/ci_hdrc_imx.c

   250
   251	static int ci_hdrc_imx_notify_event(struct ci_hdrc *ci, unsigned int event)
   252	{
   253		struct device *dev = ci->dev->parent;
   254		struct ci_hdrc_imx_data *data = dev_get_drvdata(dev);
   255		int ret = 0;
   256
   257		switch (event) {
   258		case CI_HDRC_IMX_HSIC_ACTIVE_EVENT:
   259			if (!IS_ERR(data->pinctrl) &&
   260				!IS_ERR(data->pinctrl_hsic_active)) {
 > 261				ret = pinctrl_select_state(data->pinctrl,
   262						data->pinctrl_hsic_active);
   263				if (ret)
   264					dev_err(dev,
   265						"hsic_active select failed, err=%d\n",
   266						ret);
   267				return ret;
   268			}
   269			break;
   270		case CI_HDRC_IMX_HSIC_SUSPEND_EVENT:
   271			if (data->usbmisc_data) {
   272				ret = imx_usbmisc_hsic_set_connect(data-
quoted
usbmisc_data);
   273				if (ret)
   274					dev_err(dev,
   275						"hsic_set_connect failed, err=%d\n",
   276						ret);
   277				return ret;
   278			}
   279			break;
   280		default:
   281			break;
   282		}
   283
   284		return ret;
   285	}
   286
   287	static int ci_hdrc_imx_probe(struct platform_device *pdev)
   288	{
   289		struct ci_hdrc_imx_data *data;
   290		struct ci_hdrc_platform_data pdata = {
   291			.name		= dev_name(&pdev->dev),
   292			.capoffset	= DEF_CAPOFFSET,
   293			.notify_event	= ci_hdrc_imx_notify_event,
   294		};
   295		int ret;
   296		const struct of_device_id *of_id;
   297		const struct ci_hdrc_imx_platform_flag *imx_platform_flag;
   298		struct device_node *np = pdev->dev.of_node;
   299		struct device *dev = &pdev->dev;
   300		struct pinctrl_state *pinctrl_hsic_idle;
   301
   302		of_id = of_match_device(ci_hdrc_imx_dt_ids, dev);
   303		if (!of_id)
   304			return -ENODEV;
   305
   306		imx_platform_flag = of_id->data;
   307
   308		data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
   309		if (!data)
   310			return -ENOMEM;
   311
   312		platform_set_drvdata(pdev, data);
   313		data->usbmisc_data = usbmisc_get_init_data(dev);
   314		if (IS_ERR(data->usbmisc_data))
   315			return PTR_ERR(data->usbmisc_data);
   316
 > 317		data->pinctrl = devm_pinctrl_get(dev);
   318		if (IS_ERR(data->pinctrl)) {
   319			dev_dbg(dev, "pinctrl get failed, err=%ld\n",
   320							PTR_ERR(data->pinctrl));
   321		} else {
 > 322			pinctrl_hsic_idle = pinctrl_lookup_state(data->pinctrl, "idle");
   323			if (IS_ERR(pinctrl_hsic_idle)) {
   324				dev_dbg(dev,
   325					"pinctrl_hsic_idle lookup failed, err=%ld\n",
   326							PTR_ERR(pinctrl_hsic_idle));
   327			} else {
   328				ret = pinctrl_select_state(data->pinctrl,
   329							pinctrl_hsic_idle);
   330				if (ret) {
   331					dev_err(dev,
   332						"hsic_idle select failed, err=%d\n",
   333										ret);
   334					return ret;
   335				}
   336			}
   337
   338			data->pinctrl_hsic_active = pinctrl_lookup_state(data->pinctrl,
   339									"active");
   340			if (IS_ERR(data->pinctrl_hsic_active))
   341				dev_dbg(dev,
   342					"pinctrl_hsic_active lookup failed, err=%ld\n",
   343						PTR_ERR(data->pinctrl_hsic_active));
   344		}
   345
   346		ret = imx_get_clks(dev);
   347		if (ret)
   348			return ret;
   349
   350		ret = imx_prepare_enable_clks(dev);
   351		if (ret)
   352			return ret;
   353
   354		data->phy = devm_usb_get_phy_by_phandle(dev, "fsl,usbphy", 0);
   355		if (IS_ERR(data->phy)) {
   356			ret = PTR_ERR(data->phy);
   357			/* Return -EINVAL if no usbphy is available */
   358			if (ret == -ENODEV)
   359				ret = -EINVAL;
   360			goto err_clk;
   361		}
   362
   363		pdata.usb_phy = data->phy;
   364
   365		if ((of_device_is_compatible(np, "fsl,imx53-usb") ||
   366		     of_device_is_compatible(np, "fsl,imx51-usb")) && pdata.usb_phy
&&
   367		    of_usb_get_phy_mode(np) ==
USBPHY_INTERFACE_MODE_ULPI) {
   368			pdata.flags |= CI_HDRC_OVERRIDE_PHY_CONTROL;
   369			data->override_phy_control = true;
   370			usb_phy_init(pdata.usb_phy);
   371		}
   372
   373		pdata.flags |= imx_platform_flag->flags;
   374		if (pdata.flags & CI_HDRC_SUPPORTS_RUNTIME_PM)
   375			data->supports_runtime_pm = true;
   376
   377		if (of_usb_get_phy_mode(dev->of_node) ==
USBPHY_INTERFACE_MODE_HSIC) {
   378			pdata.flags |= CI_HDRC_IMX_IS_HSIC;
   379			data->usbmisc_data->hsic = 1;
   380			data->hsic_pad_regulator = devm_regulator_get(dev, "hsic");
   381			if (PTR_ERR(data->hsic_pad_regulator) == -
EPROBE_DEFER) {
   382				ret = -EPROBE_DEFER;
   383				goto err_clk;
   384			} else if (PTR_ERR(data->hsic_pad_regulator) == -ENODEV)
{
   385				/* no pad regualator is needed */
   386				data->hsic_pad_regulator = NULL;
   387			} else if (IS_ERR(data->hsic_pad_regulator)) {
   388				dev_err(dev, "Get hsic pad regulator error: %ld\n",
   389						PTR_ERR(data->hsic_pad_regulator));
   390				ret = PTR_ERR(data->hsic_pad_regulator);
   391				goto err_clk;
   392			}
   393
   394			if (data->hsic_pad_regulator) {
   395				ret = regulator_enable(data->hsic_pad_regulator);
   396				if (ret) {
   397					dev_err(dev,
   398						"Fail to enable hsic pad regulator\n");
   399					goto err_clk;
   400				}
   401			}
   402		}
   403
   404		ret = imx_usbmisc_init(data->usbmisc_data);
   405		if (ret) {
   406			dev_err(dev, "usbmisc init failed, ret=%d\n", ret);
   407			goto disable_hsic_regulator;
   408		}
   409
   410		data->ci_pdev = ci_hdrc_add_device(dev,
   411					pdev->resource, pdev->num_resources,
   412					&pdata);
   413		if (IS_ERR(data->ci_pdev)) {
   414			ret = PTR_ERR(data->ci_pdev);
   415			if (ret != -EPROBE_DEFER)
   416				dev_err(dev, "ci_hdrc_add_device failed, err=%d\n",
   417						ret);
   418			goto disable_hsic_regulator;
   419		}
   420
   421		ret = imx_usbmisc_init_post(data->usbmisc_data);
   422		if (ret) {
   423			dev_err(dev, "usbmisc post failed, ret=%d\n", ret);
   424			goto disable_device;
   425		}
   426
   427		if (data->supports_runtime_pm) {
   428			pm_runtime_set_active(dev);
   429			pm_runtime_enable(dev);
   430		}
   431
   432		device_set_wakeup_capable(dev, true);
   433
   434		return 0;
   435
   436	disable_device:
   437		ci_hdrc_remove_device(data->ci_pdev);
   438	disable_hsic_regulator:
   439		if (data->hsic_pad_regulator)
   440			ret = regulator_disable(data->hsic_pad_regulator);
   441	err_clk:
   442		imx_disable_unprepare_clks(dev);
   443		return ret;
   444	}
   445

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://emea01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.01.org
%2Fpipermail%2Fkbuild-
all&amp;data=02%7C01%7Cpeter.chen%40nxp.com%7C50f2cf2d6d5341bf72cc08
d6332ba794%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C636752662
551616821&amp;sdata=FeXt%2BW7Jnl%2B%2BihbZjlVj5vZddN2C%2Fuf63PeBJv
MQ6TA%3D&amp;reserved=0                   Intel Corporation
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help