Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e8e44a48 authored by Dongjin Kim's avatar Dongjin Kim Committed by Greg Kroah-Hartman
Browse files

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: default avatarDongjin Kim <tobetter@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 45f6bc5f
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -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,13 +132,15 @@ static int usb3503_switch_mode(struct usb3503 *hub, enum usb3503_mode mode)
			goto err_hubmode;
		}

		/* PDS : Port2,3 Disable For Self Powered Operation */
		/* PDS : Disable For Self Powered Operation */
		if (hub->port_off_mask) {
			err = usb3503_set_bits(i2c, USB3503_PDS,
				(USB3503_PORT2 | USB3503_PORT3));
					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 */
		err = usb3503_set_bits(i2c, USB3503_CFG1, USB3503_SELF_BUS_PWR);
@@ -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;
+5 −0
Original line number Diff line number Diff line
@@ -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,
@@ -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;