Skip to content

Commit

Permalink
usb: misc: usb3503: Add to select the ports to disable
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Dongjin Kim authored and Greg Kroah-Hartman committed May 30, 2013
1 parent 45f6bc5 commit e8e44a4
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
19 changes: 10 additions & 9 deletions drivers/usb/misc/usb3503.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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;
Expand Down Expand Up @@ -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 */
Expand Down Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions include/linux/platform_data/usb3503.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@

#define USB3503_I2C_NAME "usb3503"

#define USB3503_OFF_PORT1 (1 << 1)
#define USB3503_OFF_PORT2 (1 << 2)
#define USB3503_OFF_PORT3 (1 << 3)

enum usb3503_mode {
USB3503_MODE_UNKNOWN,
USB3503_MODE_HUB,
Expand All @@ -11,6 +15,7 @@ enum usb3503_mode {

struct usb3503_platform_data {
enum usb3503_mode initial_mode;
u8 port_off_mask;
int gpio_intn;
int gpio_connect;
int gpio_reset;
Expand Down

0 comments on commit e8e44a4

Please sign in to comment.