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

Commit 1d272894 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski Committed by Sekhar Nori
Browse files

ARM: davinci: omapl138-hawk: add a fixed regulator for ohci-da8xx



Instead of directly using the vbus GPIO we should model it as a fixed
regulator. Add all necessary fix-ups for the regulator to be registered
and configure the vbus GPIO as its enable pin.

Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: default avatarSekhar Nori <nsekhar@ti.com>
parent d3273301
Loading
Loading
Loading
Loading
+46 −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,15 +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 */
@@ -327,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)