Message ID | 20230504-b4-v6-3-topic-boards-imx8mp-evk-dual-role-usb-v2-2-3889b1b2050c@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add i.MX8MP-EVK USB Gadget Support | expand |
Hi Marco, kernel test robot noticed the following build warnings: [auto build test WARNING on 457391b0380335d5e9a5babdec90ac53928b23b4] url: https://github.com/intel-lab-lkp/linux/commits/Marco-Felsch/dt-bindings-usb-gpio-sbu-mux-add-support-for-ss-data-lanes-mux/20230504-214927 base: 457391b0380335d5e9a5babdec90ac53928b23b4 patch link: https://lore.kernel.org/r/20230504-b4-v6-3-topic-boards-imx8mp-evk-dual-role-usb-v2-2-3889b1b2050c%40pengutronix.de patch subject: [PATCH v2 2/4] usb: typec: mux: gpio-sbu-mux: add support for ss data lane muxing config: riscv-randconfig-r042-20230501 (https://download.01.org/0day-ci/archive/20230504/202305042306.TmTuYCAJ-lkp@intel.com/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project b1465cd49efcbc114a75220b153f5a055ce7911f) 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 riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://github.com/intel-lab-lkp/linux/commit/8cbffd4f358b26347855cb2dcae31dd8c012226f git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Marco-Felsch/dt-bindings-usb-gpio-sbu-mux-add-support-for-ss-data-lanes-mux/20230504-214927 git checkout 8cbffd4f358b26347855cb2dcae31dd8c012226f # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash drivers/usb/typec/mux/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202305042306.TmTuYCAJ-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/usb/typec/mux/gpio-sbu-mux.c:119:18: warning: cast to smaller integer type 'enum gpio_sbu_mux_type' from 'const void *' [-Wvoid-pointer-to-enum-cast] sbu_mux->type = (enum gpio_sbu_mux_type)device_get_match_data(&pdev->dev); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. vim +119 drivers/usb/typec/mux/gpio-sbu-mux.c 107 108 static int gpio_sbu_mux_probe(struct platform_device *pdev) 109 { 110 struct typec_switch_desc sw_desc = { }; 111 struct typec_mux_desc mux_desc = { }; 112 struct device *dev = &pdev->dev; 113 struct gpio_sbu_mux *sbu_mux; 114 115 sbu_mux = devm_kzalloc(dev, sizeof(*sbu_mux), GFP_KERNEL); 116 if (!sbu_mux) 117 return -ENOMEM; 118 > 119 sbu_mux->type = (enum gpio_sbu_mux_type)device_get_match_data(&pdev->dev); 120 121 mutex_init(&sbu_mux->lock); 122 123 sbu_mux->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW); 124 if (IS_ERR(sbu_mux->enable_gpio)) 125 return dev_err_probe(dev, PTR_ERR(sbu_mux->enable_gpio), 126 "unable to acquire enable gpio\n"); 127 128 sbu_mux->select_gpio = devm_gpiod_get(dev, "select", GPIOD_OUT_LOW); 129 if (IS_ERR(sbu_mux->select_gpio)) 130 return dev_err_probe(dev, PTR_ERR(sbu_mux->select_gpio), 131 "unable to acquire select gpio\n"); 132 133 sw_desc.drvdata = sbu_mux; 134 sw_desc.fwnode = dev_fwnode(dev); 135 sw_desc.set = gpio_sbu_switch_set; 136 137 sbu_mux->sw = typec_switch_register(dev, &sw_desc); 138 if (IS_ERR(sbu_mux->sw)) 139 return dev_err_probe(dev, PTR_ERR(sbu_mux->sw), 140 "failed to register typec switch\n"); 141 142 mux_desc.drvdata = sbu_mux; 143 mux_desc.fwnode = dev_fwnode(dev); 144 mux_desc.set = gpio_sbu_mux_set; 145 146 sbu_mux->mux = typec_mux_register(dev, &mux_desc); 147 if (IS_ERR(sbu_mux->mux)) { 148 typec_switch_unregister(sbu_mux->sw); 149 return dev_err_probe(dev, PTR_ERR(sbu_mux->mux), 150 "failed to register typec mux\n"); 151 } 152 153 platform_set_drvdata(pdev, sbu_mux); 154 155 return 0; 156 } 157
diff --git a/drivers/usb/typec/mux/Kconfig b/drivers/usb/typec/mux/Kconfig index c46fa4f9d3df..68438e7722d0 100644 --- a/drivers/usb/typec/mux/Kconfig +++ b/drivers/usb/typec/mux/Kconfig @@ -13,10 +13,11 @@ config TYPEC_MUX_FSA4480 If compiled as a module, the module will be named fsa4480. config TYPEC_MUX_GPIO_SBU - tristate "Generic GPIO based SBU mux for USB Type-C applications" + tristate "Generic GPIO based SS/SBU mux for USB Type-C applications" help Say Y or M if your system uses a GPIO based mux for managing the - connected state and the swapping of the SBU lines in a Type-C port. + connected state and the swapping of the SS or SBU lines in a Type-C + port. config TYPEC_MUX_PI3USB30532 tristate "Pericom PI3USB30532 Type-C cross switch driver" diff --git a/drivers/usb/typec/mux/gpio-sbu-mux.c b/drivers/usb/typec/mux/gpio-sbu-mux.c index f62516dafe8f..a1a560a085b8 100644 --- a/drivers/usb/typec/mux/gpio-sbu-mux.c +++ b/drivers/usb/typec/mux/gpio-sbu-mux.c @@ -14,12 +14,18 @@ #include <linux/usb/typec_dp.h> #include <linux/usb/typec_mux.h> +enum gpio_sbu_mux_type { + MUX_TYPE_SBU, + MUX_TYPE_SS, +}; + struct gpio_sbu_mux { struct gpio_desc *enable_gpio; struct gpio_desc *select_gpio; struct typec_switch_dev *sw; struct typec_mux_dev *mux; + enum gpio_sbu_mux_type type; struct mutex lock; /* protect enabled and swapped */ bool enabled; @@ -38,6 +44,13 @@ static int gpio_sbu_switch_set(struct typec_switch_dev *sw, enabled = sbu_mux->enabled; swapped = sbu_mux->swapped; + /* + * In case of muxing the SS data lanes the enable status depends only on + * the orientation and not on the TYPEC_DP_STATE_* + */ + if (sbu_mux->type == MUX_TYPE_SS) + enabled = true; + switch (orientation) { case TYPEC_ORIENTATION_NONE: enabled = false; @@ -103,6 +116,8 @@ static int gpio_sbu_mux_probe(struct platform_device *pdev) if (!sbu_mux) return -ENOMEM; + sbu_mux->type = (enum gpio_sbu_mux_type)device_get_match_data(&pdev->dev); + mutex_init(&sbu_mux->lock); sbu_mux->enable_gpio = devm_gpiod_get(dev, "enable", GPIOD_OUT_LOW); @@ -153,7 +168,8 @@ static int gpio_sbu_mux_remove(struct platform_device *pdev) } static const struct of_device_id gpio_sbu_mux_match[] = { - { .compatible = "gpio-sbu-mux", }, + { .compatible = "gpio-sbu-mux", .data = (void *)MUX_TYPE_SBU }, + { .compatible = "gpio-ss-mux", .data = (void *)MUX_TYPE_SS }, {} }; MODULE_DEVICE_TABLE(of, gpio_sbu_mux_match);
The commit adds the support to handle gpio based usb-c ss data lanes muxes as well. The only difference is the data lanes enable handling. The data lanes don't depend on the alt-mode settings instead they depend on the usb-c cable orientation (connected, not connected). Signed-off-by: Marco Felsch <m.felsch@pengutronix.de> --- drivers/usb/typec/mux/Kconfig | 5 +++-- drivers/usb/typec/mux/gpio-sbu-mux.c | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-)