On Thu, Mar 1, 2018 at 1:27 PM, Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> wrote: > Oh, this only works for csi ports that have pinctrl in their csi port > node, like: > > &ipu1_csi0 { > pinctrl-names = "default"; > pinctrl-0 = <&pinctrl_ipu1_csi0>; > }; This is the case for imx6qdl-sabresd.dtsi and even in this case devm_pinctrl_get_select_default() fails > pinctrl would have to be moved out of the csi port nodes, for example > into their parent ipu nodes, or maybe more correctly, into the video mux > nodes in each device tree. Tried it like this: --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi @@ -154,12 +154,9 @@ }; &ipu1_csi0_mux_from_parallel_sensor { - remote-endpoint = <&ov5642_to_ipu1_csi0_mux>; -}; - -&ipu1_csi0 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ipu1_csi0>; + remote-endpoint = <&ov5642_to_ipu1_csi0_mux>; }; &mipi_csi { but still get the devm_pinctrl_get_select_default() failure. I was not able to change the dts so that devm_pinctrl_get_select_default() succeeds. If you agree I can send the following change: diff --git a/drivers/staging/media/imx/imx-media-csi.c b/drivers/staging/media/imx/imx-media-csi.c index 5a195f8..c40f786 100644 --- a/drivers/staging/media/imx/imx-media-csi.c +++ b/drivers/staging/media/imx/imx-media-csi.c @@ -1797,11 +1797,8 @@ static int imx_csi_probe(struct platform_device *pdev) */ priv->dev->of_node = pdata->of_node; pinctrl = devm_pinctrl_get_select_default(priv->dev); - if (IS_ERR(pinctrl)) { - ret = PTR_ERR(priv->vdev); - goto free; - } - + if (IS_ERR(pinctrl)) + dev_dbg(priv->dev, "pintrl_get_select_default() failed\n"); ret = v4l2_async_register_subdev(&priv->sd); if (ret) goto free; So that the error is ignored and we still can change the pinctrl values via dts. What do you think?