diff options
author | Dongjin Kim <tobetter@gmail.com> | 2013-05-22 05:20:08 +0900 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-03-20 17:44:01 +0900 |
commit | 65d9ad4424e47579606ae76b4e64bae0f9f4c92d (patch) | |
tree | b3db57cc8b0652658ecca3ab1b85ecde910767e4 /drivers | |
parent | 507ba96c49fe6e247dcb5a79e1aca7160def7254 (diff) | |
download | linux-3.10-65d9ad4424e47579606ae76b4e64bae0f9f4c92d.tar.gz linux-3.10-65d9ad4424e47579606ae76b4e64bae0f9f4c92d.tar.bz2 linux-3.10-65d9ad4424e47579606ae76b4e64bae0f9f4c92d.zip |
usb: misc: usb3503: Add to select the ports to disable
This patch is to disable the USB ports unconnected to USB3503. In order to
disable the port, 'port_off_mask' must be set.
* Disable PORT1 only
.port_off_mask = USB3503_OFF_PORT1;
* Disable PORT1 and PORT3 only
.port_off_mask = USB3503_OFF_PORT1 | USB3503_OFF_PORT3;
* Enables all ports
.port_off_mask = 0;
Signed-off-by: Dongjin Kim <tobetter@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[mszyprow: mainline commit e8e44a4896a5f0bde1af36a31b7ec662bdaa44ef]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: Ie8e44a4896a5f0bde1af36a31b7ec662bdaa44ef
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/misc/usb3503.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/usb/misc/usb3503.c b/drivers/usb/misc/usb3503.c index d3a1cce1bf9..ab24bb34597 100644 --- a/drivers/usb/misc/usb3503.c +++ b/drivers/usb/misc/usb3503.c @@ -42,9 +42,6 @@ #define USB3503_NRD 0x09 #define USB3503_PDS 0x0a -#define USB3503_PORT1 (1 << 1) -#define USB3503_PORT2 (1 << 2) -#define USB3503_PORT3 (1 << 3) #define USB3503_SP_ILOCK 0xe7 #define USB3503_SPILOCK_CONNECT (1 << 1) @@ -56,6 +53,7 @@ struct usb3503 { enum usb3503_mode mode; struct i2c_client *client; + u8 port_off_mask; int gpio_intn; int gpio_reset; int gpio_connect; @@ -134,12 +132,14 @@ static int usb3503_switch_mode(struct usb3503 *hub, enum usb3503_mode mode) goto err_hubmode; } - /* PDS : Port2,3 Disable For Self Powered Operation */ - err = usb3503_set_bits(i2c, USB3503_PDS, - (USB3503_PORT2 | USB3503_PORT3)); - if (err < 0) { - dev_err(&i2c->dev, "PDS failed (%d)\n", err); - goto err_hubmode; + /* PDS : Disable For Self Powered Operation */ + if (hub->port_off_mask) { + err = usb3503_set_bits(i2c, USB3503_PDS, + hub->port_off_mask); + if (err < 0) { + dev_err(&i2c->dev, "PDS failed (%d)\n", err); + goto err_hubmode; + } } /* CFG1 : SELF_BUS_PWR -> Self-Powerd operation */ @@ -197,6 +197,7 @@ static int usb3503_probe(struct i2c_client *i2c, const struct i2c_device_id *id) hub->client = i2c; if (pdata) { + hub->port_off_mask = pdata->port_off_mask; hub->gpio_intn = pdata->gpio_intn; hub->gpio_connect = pdata->gpio_connect; hub->gpio_reset = pdata->gpio_reset; |