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

Commit 640e95ab authored by Eirik Aanonsen's avatar Eirik Aanonsen Committed by Greg Kroah-Hartman
Browse files

USB: atmel uaba: Adding invert vbus_pin



Adding vbus_pin_inverted so that the usb detect pin can be active high
or low depending on HW implementation also replaced the
gpio_get_value(udc->vbus_pin); with a call to vbus_is_present(udc); This
allows the driver to be loaded and save about 0,15W on the consumption.

Signed-off-by: default avatarEirik Aanonsen <eaa@wprmedical.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 90f79768
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -1770,10 +1770,13 @@ at32_add_device_usba(unsigned int id, struct usba_platform_data *data)
					  ARRAY_SIZE(usba0_resource)))
					  ARRAY_SIZE(usba0_resource)))
		goto out_free_pdev;
		goto out_free_pdev;


	if (data)
	if (data) {
		usba_data.pdata.vbus_pin = data->vbus_pin;
		usba_data.pdata.vbus_pin = data->vbus_pin;
	else
		usba_data.pdata.vbus_pin_inverted = data->vbus_pin_inverted;
	} else {
		usba_data.pdata.vbus_pin = -EINVAL;
		usba_data.pdata.vbus_pin = -EINVAL;
		usba_data.pdata.vbus_pin_inverted = -EINVAL;
	}


	data = &usba_data.pdata;
	data = &usba_data.pdata;
	data->num_ep = ARRAY_SIZE(at32_usba_ep);
	data->num_ep = ARRAY_SIZE(at32_usba_ep);
+3 −2
Original line number Original line Diff line number Diff line
@@ -320,7 +320,7 @@ static inline void usba_cleanup_debugfs(struct usba_udc *udc)
static int vbus_is_present(struct usba_udc *udc)
static int vbus_is_present(struct usba_udc *udc)
{
{
	if (gpio_is_valid(udc->vbus_pin))
	if (gpio_is_valid(udc->vbus_pin))
		return gpio_get_value(udc->vbus_pin);
		return gpio_get_value(udc->vbus_pin) ^ udc->vbus_pin_inverted;


	/* No Vbus detection: Assume always present */
	/* No Vbus detection: Assume always present */
	return 1;
	return 1;
@@ -1763,7 +1763,7 @@ static irqreturn_t usba_vbus_irq(int irq, void *devid)
	if (!udc->driver)
	if (!udc->driver)
		goto out;
		goto out;


	vbus = gpio_get_value(udc->vbus_pin);
	vbus = vbus_is_present(udc);
	if (vbus != udc->vbus_prev) {
	if (vbus != udc->vbus_prev) {
		if (vbus) {
		if (vbus) {
			toggle_bias(1);
			toggle_bias(1);
@@ -2000,6 +2000,7 @@ static int __init usba_udc_probe(struct platform_device *pdev)
	if (gpio_is_valid(pdata->vbus_pin)) {
	if (gpio_is_valid(pdata->vbus_pin)) {
		if (!gpio_request(pdata->vbus_pin, "atmel_usba_udc")) {
		if (!gpio_request(pdata->vbus_pin, "atmel_usba_udc")) {
			udc->vbus_pin = pdata->vbus_pin;
			udc->vbus_pin = pdata->vbus_pin;
			udc->vbus_pin_inverted = pdata->vbus_pin_inverted;


			ret = request_irq(gpio_to_irq(udc->vbus_pin),
			ret = request_irq(gpio_to_irq(udc->vbus_pin),
					usba_vbus_irq, 0,
					usba_vbus_irq, 0,
+1 −0
Original line number Original line Diff line number Diff line
@@ -323,6 +323,7 @@ struct usba_udc {
	struct platform_device *pdev;
	struct platform_device *pdev;
	int irq;
	int irq;
	int vbus_pin;
	int vbus_pin;
	int vbus_pin_inverted;
	struct clk *pclk;
	struct clk *pclk;
	struct clk *hclk;
	struct clk *hclk;


+1 −0
Original line number Original line Diff line number Diff line
@@ -15,6 +15,7 @@ struct usba_ep_data {


struct usba_platform_data {
struct usba_platform_data {
	int			vbus_pin;
	int			vbus_pin;
	int		 	vbus_pin_inverted;
	int			num_ep;
	int			num_ep;
	struct usba_ep_data	ep[0];
	struct usba_ep_data	ep[0];
};
};