From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: MIME-Version: 1.0 References: <1551402256-7815-1-git-send-email-jun.li@nxp.com> <1551402256-7815-2-git-send-email-jun.li@nxp.com> In-Reply-To: <1551402256-7815-2-git-send-email-jun.li@nxp.com> From: Andy Shevchenko Date: Sat, 2 Mar 2019 18:27:11 +0200 Message-ID: Subject: Re: [PATCH v2 2/2] usb: typec: add typec switch via GPIO control Content-Type: text/plain; charset="UTF-8" To: Jun Li Cc: "robh+dt@kernel.org" , "heikki.krogerus@linux.intel.com" , "gregkh@linuxfoundation.org" , "hdegoede@redhat.com" , "linux-usb@vger.kernel.org" , "devicetree@vger.kernel.org" , dl-linux-imx List-ID: On Fri, Mar 1, 2019 at 3:25 AM Jun Li wrote: > > This patch adds a simple typec switch driver which only needs > a GPIO to switch the super speed active channel according to > typec orientation. FWIW, Reviewed-by: Andy Shevchenko One minor below. > > Signed-off-by: Li Jun > --- > > Changes for v2: > - Use the correct head files for gpio api and of_device_id: > #include > #include > - Add driver dependency on GPIOLIB > > drivers/usb/typec/mux/Kconfig | 7 +++ > drivers/usb/typec/mux/Makefile | 1 + > drivers/usb/typec/mux/gpio-switch.c | 105 ++++++++++++++++++++++++++++++++++++ > 3 files changed, 113 insertions(+) > > diff --git a/drivers/usb/typec/mux/Kconfig b/drivers/usb/typec/mux/Kconfig > index 01ed0d5..27120e6 100644 > --- a/drivers/usb/typec/mux/Kconfig > +++ b/drivers/usb/typec/mux/Kconfig > @@ -9,4 +9,11 @@ config TYPEC_MUX_PI3USB30532 > Say Y or M if your system has a Pericom PI3USB30532 Type-C cross > switch / mux chip found on some devices with a Type-C port. > > +config TYPEC_SWITCH_GPIO > + tristate "Simple Super Speed Active Switch via GPIO" > + depends on GPIOLIB > + help > + Say Y or M if your system has a typec super speed channel > + switch via a simple GPIO control. > + > endmenu > diff --git a/drivers/usb/typec/mux/Makefile b/drivers/usb/typec/mux/Makefile > index 1332e46..e29377c 100644 > --- a/drivers/usb/typec/mux/Makefile > +++ b/drivers/usb/typec/mux/Makefile > @@ -1,3 +1,4 @@ > # SPDX-License-Identifier: GPL-2.0 > > obj-$(CONFIG_TYPEC_MUX_PI3USB30532) += pi3usb30532.o > +obj-$(CONFIG_TYPEC_SWITCH_GPIO) += gpio-switch.o > diff --git a/drivers/usb/typec/mux/gpio-switch.c b/drivers/usb/typec/mux/gpio-switch.c > new file mode 100644 > index 0000000..b01844c > --- /dev/null > +++ b/drivers/usb/typec/mux/gpio-switch.c > @@ -0,0 +1,105 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/** > + * gpio-switch.c - typec switch via a simple GPIO control. If under any circumstances file will be renamed this become outdated. So, better not to include file name in the file. > + * > + * Copyright 2019 NXP > + * Author: Jun Li > + * > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +struct gpio_typec_switch { > + struct typec_switch sw; > + struct mutex lock; > + struct gpio_desc *ss_sel; > +}; > + > +static int switch_gpio_set(struct typec_switch *sw, > + enum typec_orientation orientation) > +{ > + struct gpio_typec_switch *gpio_sw = container_of(sw, > + struct gpio_typec_switch, sw); > + > + mutex_lock(&gpio_sw->lock); > + > + switch (orientation) { > + case TYPEC_ORIENTATION_NORMAL: > + gpiod_set_value_cansleep(gpio_sw->ss_sel, 1); > + break; > + case TYPEC_ORIENTATION_REVERSE: > + gpiod_set_value_cansleep(gpio_sw->ss_sel, 0); > + break; > + case TYPEC_ORIENTATION_NONE: > + break; > + } > + > + mutex_unlock(&gpio_sw->lock); > + > + return 0; > +} > + > +static int typec_switch_gpio_probe(struct platform_device *pdev) > +{ > + struct gpio_typec_switch *gpio_sw; > + struct device *dev = &pdev->dev; > + int ret; > + > + gpio_sw = devm_kzalloc(dev, sizeof(*gpio_sw), GFP_KERNEL); > + if (!gpio_sw) > + return -ENOMEM; > + > + platform_set_drvdata(pdev, gpio_sw); > + > + gpio_sw->sw.dev = dev; > + gpio_sw->sw.set = switch_gpio_set; > + mutex_init(&gpio_sw->lock); > + > + /* Get the super speed active channel selection GPIO */ > + gpio_sw->ss_sel = devm_gpiod_get(dev, NULL, GPIOD_OUT_LOW); > + if (IS_ERR(gpio_sw->ss_sel)) > + return PTR_ERR(gpio_sw->ss_sel); > + > + ret = typec_switch_register(&gpio_sw->sw); > + if (ret) { > + dev_err(dev, "Error registering typec switch: %d\n", ret); > + return ret; > + } > + > + return 0; > +} > + > +static int typec_switch_gpio_remove(struct platform_device *pdev) > +{ > + struct gpio_typec_switch *gpio_sw = platform_get_drvdata(pdev); > + > + typec_switch_unregister(&gpio_sw->sw); > + > + return 0; > +} > + > +static const struct of_device_id of_typec_switch_gpio_match[] = { > + { .compatible = "nxp,ptn36043" }, > + { /* Sentinel */ } > +}; > +MODULE_DEVICE_TABLE(of, of_typec_switch_gpio_match); > + > +static struct platform_driver typec_switch_gpio_driver = { > + .probe = typec_switch_gpio_probe, > + .remove = typec_switch_gpio_remove, > + .driver = { > + .name = "typec-switch-gpio", > + .of_match_table = of_typec_switch_gpio_match, > + }, > +}; > + > +module_platform_driver(typec_switch_gpio_driver); > +MODULE_LICENSE("GPL v2"); > +MODULE_DESCRIPTION("TypeC Super Speed Switch GPIO driver"); > +MODULE_AUTHOR("Jun Li "); > -- > 2.7.4 > -- With Best Regards, Andy Shevchenko From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,2/2] usb: typec: add typec switch via GPIO control From: Andy Shevchenko Message-Id: Date: Sat, 2 Mar 2019 18:27:11 +0200 To: Jun Li Cc: "robh+dt@kernel.org" , "heikki.krogerus@linux.intel.com" , "gregkh@linuxfoundation.org" , "hdegoede@redhat.com" , "linux-usb@vger.kernel.org" , "devicetree@vger.kernel.org" , dl-linux-imx List-ID: T24gRnJpLCBNYXIgMSwgMjAxOSBhdCAzOjI1IEFNIEp1biBMaSA8anVuLmxpQG54cC5jb20+IHdy b3RlOgo+Cj4gVGhpcyBwYXRjaCBhZGRzIGEgc2ltcGxlIHR5cGVjIHN3aXRjaCBkcml2ZXIgd2hp Y2ggb25seSBuZWVkcwo+IGEgR1BJTyB0byBzd2l0Y2ggdGhlIHN1cGVyIHNwZWVkIGFjdGl2ZSBj aGFubmVsIGFjY29yZGluZyB0bwo+IHR5cGVjIG9yaWVudGF0aW9uLgoKRldJVywKUmV2aWV3ZWQt Ynk6IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4KCk9uZSBtaW5v ciBiZWxvdy4KCj4KPiBTaWduZWQtb2ZmLWJ5OiBMaSBKdW4gPGp1bi5saUBueHAuY29tPgo+IC0t LQo+Cj4gQ2hhbmdlcyBmb3IgdjI6Cj4gLSBVc2UgdGhlIGNvcnJlY3QgaGVhZCBmaWxlcyBmb3Ig Z3BpbyBhcGkgYW5kIG9mX2RldmljZV9pZDoKPiAgICNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1 bWVyLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+Cj4gLSBBZGQgZHJp dmVyIGRlcGVuZGVuY3kgb24gR1BJT0xJQgo+Cj4gIGRyaXZlcnMvdXNiL3R5cGVjL211eC9LY29u ZmlnICAgICAgIHwgICA3ICsrKwo+ICBkcml2ZXJzL3VzYi90eXBlYy9tdXgvTWFrZWZpbGUgICAg ICB8ICAgMSArCj4gIGRyaXZlcnMvdXNiL3R5cGVjL211eC9ncGlvLXN3aXRjaC5jIHwgMTA1ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDEx MyBpbnNlcnRpb25zKCspCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvbXV4L0tj b25maWcgYi9kcml2ZXJzL3VzYi90eXBlYy9tdXgvS2NvbmZpZwo+IGluZGV4IDAxZWQwZDUuLjI3 MTIwZTYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvbXV4L0tjb25maWcKPiArKysg Yi9kcml2ZXJzL3VzYi90eXBlYy9tdXgvS2NvbmZpZwo+IEBAIC05LDQgKzksMTEgQEAgY29uZmln IFRZUEVDX01VWF9QSTNVU0IzMDUzMgo+ICAgICAgICAgICBTYXkgWSBvciBNIGlmIHlvdXIgc3lz dGVtIGhhcyBhIFBlcmljb20gUEkzVVNCMzA1MzIgVHlwZS1DIGNyb3NzCj4gICAgICAgICAgIHN3 aXRjaCAvIG11eCBjaGlwIGZvdW5kIG9uIHNvbWUgZGV2aWNlcyB3aXRoIGEgVHlwZS1DIHBvcnQu Cj4KPiArY29uZmlnIFRZUEVDX1NXSVRDSF9HUElPCj4gKyAgICAgICB0cmlzdGF0ZSAiU2ltcGxl IFN1cGVyIFNwZWVkIEFjdGl2ZSBTd2l0Y2ggdmlhIEdQSU8iCj4gKyAgICAgICBkZXBlbmRzIG9u IEdQSU9MSUIKPiArICAgICAgIGhlbHAKPiArICAgICAgICAgU2F5IFkgb3IgTSBpZiB5b3VyIHN5 c3RlbSBoYXMgYSB0eXBlYyBzdXBlciBzcGVlZCBjaGFubmVsCj4gKyAgICAgICAgIHN3aXRjaCB2 aWEgYSBzaW1wbGUgR1BJTyBjb250cm9sLgo+ICsKPiAgZW5kbWVudQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi90eXBlYy9tdXgvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi90eXBlYy9tdXgvTWFr ZWZpbGUKPiBpbmRleCAxMzMyZTQ2Li5lMjkzNzdjIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNi L3R5cGVjL211eC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL211eC9NYWtlZmls ZQo+IEBAIC0xLDMgKzEsNCBAQAo+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w Cj4KPiAgb2JqLSQoQ09ORklHX1RZUEVDX01VWF9QSTNVU0IzMDUzMikgICAgKz0gcGkzdXNiMzA1 MzIubwo+ICtvYmotJChDT05GSUdfVFlQRUNfU1dJVENIX0dQSU8pICAgICAgICAgICAgICAgICs9 IGdwaW8tc3dpdGNoLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvbXV4L2dwaW8t c3dpdGNoLmMgYi9kcml2ZXJzL3VzYi90eXBlYy9tdXgvZ3Bpby1zd2l0Y2guYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYjAxODQ0Ywo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL3VzYi90eXBlYy9tdXgvZ3Bpby1zd2l0Y2guYwo+IEBAIC0wLDAgKzEsMTA1 IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qKgoKPiArICog Z3Bpby1zd2l0Y2guYyAtIHR5cGVjIHN3aXRjaCB2aWEgYSBzaW1wbGUgR1BJTyBjb250cm9sLgoK SWYgdW5kZXIgYW55IGNpcmN1bXN0YW5jZXMgZmlsZSB3aWxsIGJlIHJlbmFtZWQgdGhpcyBiZWNv bWUgb3V0ZGF0ZWQuClNvLCBiZXR0ZXIgbm90IHRvIGluY2x1ZGUgZmlsZSBuYW1lIGluIHRoZSBm aWxlLgoKPiArICoKPiArICogQ29weXJpZ2h0IDIwMTkgTlhQCj4gKyAqIEF1dGhvcjogSnVuIExp IDxqdW4ubGlAbnhwLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdXNiL3R5cGVjX211eC5oPgo+ICsKPiArc3RydWN0IGdw aW9fdHlwZWNfc3dpdGNoIHsKPiArICAgICAgIHN0cnVjdCB0eXBlY19zd2l0Y2ggc3c7Cj4gKyAg ICAgICBzdHJ1Y3QgbXV0ZXggbG9jazsKPiArICAgICAgIHN0cnVjdCBncGlvX2Rlc2MgKnNzX3Nl bDsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgc3dpdGNoX2dwaW9fc2V0KHN0cnVjdCB0eXBlY19z d2l0Y2ggKnN3LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gdHlwZWNfb3JpZW50 YXRpb24gb3JpZW50YXRpb24pCj4gK3sKPiArICAgICAgIHN0cnVjdCBncGlvX3R5cGVjX3N3aXRj aCAqZ3Bpb19zdyA9IGNvbnRhaW5lcl9vZihzdywKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBncGlvX3R5cGVjX3N3aXRjaCwgc3cpOwo+ICsKPiArICAgICAgIG11dGV4 X2xvY2soJmdwaW9fc3ctPmxvY2spOwo+ICsKPiArICAgICAgIHN3aXRjaCAob3JpZW50YXRpb24p IHsKPiArICAgICAgIGNhc2UgVFlQRUNfT1JJRU5UQVRJT05fTk9STUFMOgo+ICsgICAgICAgICAg ICAgICBncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoZ3Bpb19zdy0+c3Nfc2VsLCAxKTsKPiArICAg ICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICBjYXNlIFRZUEVDX09SSUVOVEFUSU9OX1JFVkVS U0U6Cj4gKyAgICAgICAgICAgICAgIGdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChncGlvX3N3LT5z c19zZWwsIDApOwo+ICsgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgIGNhc2UgVFlQRUNf T1JJRU5UQVRJT05fTk9ORToKPiArICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICB9Cj4g Kwo+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZncGlvX3N3LT5sb2NrKTsKPiArCj4gKyAgICAgICBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0eXBlY19zd2l0Y2hfZ3Bpb19wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZ3Bpb190 eXBlY19zd2l0Y2ggICAgICAgICpncGlvX3N3Owo+ICsgICAgICAgc3RydWN0IGRldmljZSAgICAg ICAgICAgICAgICAgICAqZGV2ID0gJnBkZXYtPmRldjsKPiArICAgICAgIGludCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0Owo+ICsKPiArICAgICAgIGdwaW9fc3cgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKmdwaW9fc3cpLCBHRlBfS0VSTkVMKTsKPiArICAgICAgIGlmICghZ3Bp b19zdykKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsgICAgICAgcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ3Bpb19zdyk7Cj4gKwo+ICsgICAgICAgZ3Bpb19zdy0+ c3cuZGV2ID0gZGV2Owo+ICsgICAgICAgZ3Bpb19zdy0+c3cuc2V0ID0gc3dpdGNoX2dwaW9fc2V0 Owo+ICsgICAgICAgbXV0ZXhfaW5pdCgmZ3Bpb19zdy0+bG9jayk7Cj4gKwo+ICsgICAgICAgLyog R2V0IHRoZSBzdXBlciBzcGVlZCBhY3RpdmUgY2hhbm5lbCBzZWxlY3Rpb24gR1BJTyAqLwo+ICsg ICAgICAgZ3Bpb19zdy0+c3Nfc2VsID0gZGV2bV9ncGlvZF9nZXQoZGV2LCBOVUxMLCBHUElPRF9P VVRfTE9XKTsKPiArICAgICAgIGlmIChJU19FUlIoZ3Bpb19zdy0+c3Nfc2VsKSkKPiArICAgICAg ICAgICAgICAgcmV0dXJuIFBUUl9FUlIoZ3Bpb19zdy0+c3Nfc2VsKTsKPiArCj4gKyAgICAgICBy ZXQgPSB0eXBlY19zd2l0Y2hfcmVnaXN0ZXIoJmdwaW9fc3ctPnN3KTsKPiArICAgICAgIGlmIChy ZXQpIHsKPiArICAgICAgICAgICAgICAgZGV2X2VycihkZXYsICJFcnJvciByZWdpc3RlcmluZyB0 eXBlYyBzd2l0Y2g6ICVkXG4iLCByZXQpOwo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ ICsgICAgICAgfQo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHR5cGVjX3N3aXRjaF9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICt7Cj4gKyAgICAgICBzdHJ1Y3QgZ3Bpb190eXBlY19zd2l0Y2ggKmdwaW9fc3cgPSBwbGF0Zm9y bV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKyAgICAgICB0eXBlY19zd2l0Y2hfdW5yZWdpc3Rl cigmZ3Bpb19zdy0+c3cpOwo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl90eXBlY19zd2l0Y2hfZ3Bpb19tYXRjaFtd ID0gewo+ICsgICAgICAgeyAuY29tcGF0aWJsZSA9ICJueHAscHRuMzYwNDMiIH0sCj4gKyAgICAg ICB7IC8qIFNlbnRpbmVsICovIH0KPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2Zf dHlwZWNfc3dpdGNoX2dwaW9fbWF0Y2gpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k cml2ZXIgdHlwZWNfc3dpdGNoX2dwaW9fZHJpdmVyID0gewo+ICsgICAgICAgLnByb2JlICAgICAg ICAgID0gdHlwZWNfc3dpdGNoX2dwaW9fcHJvYmUsCj4gKyAgICAgICAucmVtb3ZlICAgICAgICAg PSB0eXBlY19zd2l0Y2hfZ3Bpb19yZW1vdmUsCj4gKyAgICAgICAuZHJpdmVyICAgICAgICAgPSB7 Cj4gKyAgICAgICAgICAgICAgIC5uYW1lICAgPSAidHlwZWMtc3dpdGNoLWdwaW8iLAo+ICsgICAg ICAgICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSBvZl90eXBlY19zd2l0Y2hfZ3Bpb19tYXRjaCwK PiArICAgICAgIH0sCj4gK307Cj4gKwo+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHR5cGVjX3N3 aXRjaF9ncGlvX2RyaXZlcik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiArTU9EVUxF X0RFU0NSSVBUSU9OKCJUeXBlQyBTdXBlciBTcGVlZCBTd2l0Y2ggR1BJTyBkcml2ZXIiKTsKPiAr TU9EVUxFX0FVVEhPUigiSnVuIExpIDxqdW4ubGlAbnhwLmNvbT4iKTsKPiAtLQo+IDIuNy40Cj4K