Commit 56e49cd6 authored by Olof Johansson's avatar Olof Johansson
Browse files

Merge tag 'davinci-for-v5.2/soc' of...

Merge tag 'davinci-for-v5.2/soc' of git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci into arm/soc

This update for DaVinci SoC support simplifies the VBUS enable
and overcurrent handling code in DA8XX OHCI driver by modeling
vbus GPIO as a regulator. This unifies code for all users, device
tree and non-device-tree.

The OHCI driver patches have been acked by its maintainer.

* tag 'davinci-for-v5.2/soc' of git://git.kernel.org/pub/scm/linux/kernel/git/nsekhar/linux-davinci

:
  usb: ohci-da8xx: drop the vbus GPIO
  ARM: davinci: da830-evm: add a fixed regulator for ohci-da8xx
  ARM: davinci: omapl138-hawk: add a fixed regulator for ohci-da8xx
  usb: ohci-da8xx: disable the regulator if the overcurrent irq fired
  usb: ohci-da8xx: let the regulator framework keep track of use count
  ARM: davinci: add missing sentinels to GPIO lookup tables

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents a7d6fdf9 512de1ce
Loading
Loading
Loading
Loading
+48 −3
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include <linux/platform_data/spi-davinci.h>
#include <linux/platform_data/usb-davinci.h>
#include <linux/platform_data/ti-aemif.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>
#include <linux/nvmem-provider.h>

@@ -53,14 +54,50 @@ static const short da830_evm_usb11_pins[] = {
	-1
};

static struct gpiod_lookup_table da830_evm_usb_gpio_lookup = {
static struct regulator_consumer_supply da830_evm_usb_supplies[] = {
	REGULATOR_SUPPLY("vbus", NULL),
};

static struct regulator_init_data da830_evm_usb_vbus_data = {
	.consumer_supplies	= da830_evm_usb_supplies,
	.num_consumer_supplies	= ARRAY_SIZE(da830_evm_usb_supplies),
};

static struct fixed_voltage_config da830_evm_usb_vbus = {
	.supply_name		= "vbus",
	.microvolts		= 33000000,
	.init_data		= &da830_evm_usb_vbus_data,
};

static struct platform_device da830_evm_usb_vbus_device = {
	.name		= "reg-fixed-voltage",
	.id		= 0,
	.dev		= {
		.platform_data = &da830_evm_usb_vbus,
	},
};

static struct gpiod_lookup_table da830_evm_usb_oc_gpio_lookup = {
	.dev_id		= "ohci-da8xx",
	.table = {
		GPIO_LOOKUP("davinci_gpio", ON_BD_USB_DRV, "vbus", 0),
		GPIO_LOOKUP("davinci_gpio", ON_BD_USB_OVC, "oc", 0),
		{ }
	},
};

static struct gpiod_lookup_table da830_evm_usb_vbus_gpio_lookup = {
	.dev_id		= "reg-fixed-voltage.0",
	.table = {
		GPIO_LOOKUP("davinci_gpio", ON_BD_USB_DRV, "vbus", 0),
		{ }
	},
};

static struct gpiod_lookup_table *da830_evm_usb_gpio_lookups[] = {
	&da830_evm_usb_oc_gpio_lookup,
	&da830_evm_usb_vbus_gpio_lookup,
};

static struct da8xx_ohci_root_hub da830_evm_usb11_pdata = {
	/* TPS2065 switch @ 5V */
	.potpgt		= (3 + 1) / 2,	/* 3 ms max */
@@ -75,6 +112,9 @@ static __init void da830_evm_usb_init(void)
		pr_warn("%s: USB PHY CLK registration failed: %d\n",
			__func__, ret);

	gpiod_add_lookup_tables(da830_evm_usb_gpio_lookups,
				ARRAY_SIZE(da830_evm_usb_gpio_lookups));

	ret = da8xx_register_usb_phy();
	if (ret)
		pr_warn("%s: USB PHY registration failed: %d\n",
@@ -100,7 +140,11 @@ static __init void da830_evm_usb_init(void)
		return;
	}

	gpiod_add_lookup_table(&da830_evm_usb_gpio_lookup);
	ret = platform_device_register(&da830_evm_usb_vbus_device);
	if (ret) {
		pr_warn("%s: Unable to register the vbus supply\n", __func__);
		return;
	}

	ret = da8xx_register_usb11(&da830_evm_usb11_pdata);
	if (ret)
@@ -156,6 +200,7 @@ static struct gpiod_lookup_table mmc_gpios_table = {
			    GPIO_ACTIVE_LOW),
		GPIO_LOOKUP("davinci_gpio", DA830_MMCSD_WP_PIN, "wp",
			    GPIO_ACTIVE_LOW),
		{ }
	},
};

+1 −0
Original line number Diff line number Diff line
@@ -784,6 +784,7 @@ static struct gpiod_lookup_table mmc_gpios_table = {
			    GPIO_ACTIVE_LOW),
		GPIO_LOOKUP("davinci_gpio", DA850_MMCSD_WP_PIN, "wp",
			    GPIO_ACTIVE_HIGH),
		{ }
	},
};

+1 −0
Original line number Diff line number Diff line
@@ -121,6 +121,7 @@ static struct gpiod_lookup_table i2c_recovery_gpiod_table = {
			    GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
		GPIO_LOOKUP("davinci_gpio", DM355_I2C_SCL_PIN, "scl",
			    GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
		{ }
	},
};

+1 −0
Original line number Diff line number Diff line
@@ -663,6 +663,7 @@ static struct gpiod_lookup_table i2c_recovery_gpiod_table = {
			    GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
		GPIO_LOOKUP("davinci_gpio", DM644X_I2C_SCL_PIN, "scl",
			    GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
		{ }
	},
};

+47 −3
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <linux/platform_data/mtd-davinci.h>
#include <linux/platform_data/mtd-davinci-aemif.h>
#include <linux/platform_data/ti-aemif.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>

#include <asm/mach-types.h>
@@ -298,14 +299,50 @@ static const short da850_hawk_usb11_pins[] = {
	-1
};

static struct gpiod_lookup_table hawk_usb_gpio_lookup = {
static struct regulator_consumer_supply hawk_usb_supplies[] = {
	REGULATOR_SUPPLY("vbus", NULL),
};

static struct regulator_init_data hawk_usb_vbus_data = {
	.consumer_supplies	= hawk_usb_supplies,
	.num_consumer_supplies	= ARRAY_SIZE(hawk_usb_supplies),
};

static struct fixed_voltage_config hawk_usb_vbus = {
	.supply_name		= "vbus",
	.microvolts		= 3300000,
	.init_data		= &hawk_usb_vbus_data,
};

static struct platform_device hawk_usb_vbus_device = {
	.name		= "reg-fixed-voltage",
	.id		= 0,
	.dev		= {
		.platform_data = &hawk_usb_vbus,
	},
};

static struct gpiod_lookup_table hawk_usb_oc_gpio_lookup = {
	.dev_id		= "ohci-da8xx",
	.table = {
		GPIO_LOOKUP("davinci_gpio", DA850_USB1_VBUS_PIN, "vbus", 0),
		GPIO_LOOKUP("davinci_gpio", DA850_USB1_OC_PIN, "oc", 0),
		{ }
	},
};

static struct gpiod_lookup_table hawk_usb_vbus_gpio_lookup = {
	.dev_id		= "reg-fixed-voltage.0",
	.table = {
		GPIO_LOOKUP("davinci_gpio", DA850_USB1_VBUS_PIN, NULL, 0),
		{ }
	},
};

static struct gpiod_lookup_table *hawk_usb_gpio_lookups[] = {
	&hawk_usb_oc_gpio_lookup,
	&hawk_usb_vbus_gpio_lookup,
};

static struct da8xx_ohci_root_hub omapl138_hawk_usb11_pdata = {
	/* TPS2087 switch @ 5V */
	.potpgt         = (3 + 1) / 2,  /* 3 ms max */
@@ -326,12 +363,19 @@ static __init void omapl138_hawk_usb_init(void)
		pr_warn("%s: USB PHY CLK registration failed: %d\n",
			__func__, ret);

	gpiod_add_lookup_tables(hawk_usb_gpio_lookups,
				ARRAY_SIZE(hawk_usb_gpio_lookups));

	ret = da8xx_register_usb_phy();
	if (ret)
		pr_warn("%s: USB PHY registration failed: %d\n",
			__func__, ret);

	gpiod_add_lookup_table(&hawk_usb_gpio_lookup);
	ret = platform_device_register(&hawk_usb_vbus_device);
	if (ret) {
		pr_warn("%s: Unable to register the vbus supply\n", __func__);
		return;
	}

	ret = da8xx_register_usb11(&omapl138_hawk_usb11_pdata);
	if (ret)
Loading