Merge branch 'for-3.5/usb-ulpi' into for-3.5/dt2-new
This commit is contained in:
commit
d9e33b593b
|
@ -12,6 +12,9 @@ Required properties :
|
|||
- nvidia,vbus-gpio : If present, specifies a gpio that needs to be
|
||||
activated for the bus to be powered.
|
||||
|
||||
Required properties for phy_type == ulpi:
|
||||
- nvidia,phy-reset-gpio : The GPIO used to reset the PHY.
|
||||
|
||||
Optional properties:
|
||||
- dr_mode : dual role mode. Indicates the working mode for
|
||||
nvidia,tegra20-ehci compatible controllers. Can be "host", "peripheral",
|
||||
|
|
|
@ -167,28 +167,28 @@
|
|||
};
|
||||
conf_ata {
|
||||
nvidia,pins = "ata", "atb", "atc", "atd", "ate",
|
||||
"cdev1", "dap1", "dtb", "gma", "gmb",
|
||||
"gmc", "gmd", "gme", "gpu7", "gpv",
|
||||
"i2cp", "pta", "rm", "slxa", "slxk",
|
||||
"spia", "spib";
|
||||
"cdev1", "cdev2", "dap1", "dtb", "gma",
|
||||
"gmb", "gmc", "gmd", "gme", "gpu7",
|
||||
"gpv", "i2cp", "pta", "rm", "slxa",
|
||||
"slxk", "spia", "spib", "uac";
|
||||
nvidia,pull = <0>;
|
||||
nvidia,tristate = <0>;
|
||||
};
|
||||
conf_cdev2 {
|
||||
nvidia,pins = "cdev2", "csus", "spid", "spif";
|
||||
nvidia,pull = <1>;
|
||||
nvidia,tristate = <1>;
|
||||
};
|
||||
conf_ck32 {
|
||||
nvidia,pins = "ck32", "ddrc", "pmca", "pmcb",
|
||||
"pmcc", "pmcd", "pmce", "xm2c", "xm2d";
|
||||
nvidia,pull = <0>;
|
||||
};
|
||||
conf_csus {
|
||||
nvidia,pins = "csus", "spid", "spif";
|
||||
nvidia,pull = <1>;
|
||||
nvidia,tristate = <1>;
|
||||
};
|
||||
conf_crtp {
|
||||
nvidia,pins = "crtp", "dap2", "dap3", "dap4",
|
||||
"dtc", "dte", "dtf", "gpu", "sdio1",
|
||||
"slxc", "slxd", "spdi", "spdo", "spig",
|
||||
"uac", "uda";
|
||||
"uda";
|
||||
nvidia,pull = <0>;
|
||||
nvidia,tristate = <1>;
|
||||
};
|
||||
|
@ -336,4 +336,8 @@
|
|||
power-gpios = <&gpio 70 0>; /* gpio PI6 */
|
||||
support-8bit;
|
||||
};
|
||||
|
||||
usb@c5004000 {
|
||||
nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -159,18 +159,14 @@
|
|||
};
|
||||
conf_ata {
|
||||
nvidia,pins = "ata", "atb", "atc", "atd", "ate",
|
||||
"cdev1", "dap1", "dap2", "dtf", "gma",
|
||||
"gmb", "gmc", "gmd", "gme", "gpu",
|
||||
"gpu7", "gpv", "i2cp", "pta", "rm",
|
||||
"sdio1", "slxk", "spdo", "uac", "uda";
|
||||
"cdev1", "cdev2", "dap1", "dap2", "dtf",
|
||||
"gma", "gmb", "gmc", "gmd", "gme",
|
||||
"gpu", "gpu7", "gpv", "i2cp", "pta",
|
||||
"rm", "sdio1", "slxk", "spdo", "uac",
|
||||
"uda";
|
||||
nvidia,pull = <0>;
|
||||
nvidia,tristate = <0>;
|
||||
};
|
||||
conf_cdev2 {
|
||||
nvidia,pins = "cdev2";
|
||||
nvidia,pull = <1>;
|
||||
nvidia,tristate = <0>;
|
||||
};
|
||||
conf_ck32 {
|
||||
nvidia,pins = "ck32", "ddrc", "pmca", "pmcb",
|
||||
"pmcc", "pmcd", "pmce", "xm2c", "xm2d";
|
||||
|
@ -351,4 +347,8 @@
|
|||
linux,default-trigger = "rfkill0";
|
||||
};
|
||||
};
|
||||
|
||||
usb@c5004000 {
|
||||
nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -415,4 +415,8 @@
|
|||
0x00000000 0x00000000 0x00000000 0x00000000 >;
|
||||
};
|
||||
};
|
||||
|
||||
usb@c5004000 {
|
||||
nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -182,23 +182,23 @@
|
|||
nvidia,tristate = <1>;
|
||||
};
|
||||
conf_atb {
|
||||
nvidia,pins = "atb", "cdev1", "dap1", "gma",
|
||||
"gmc", "gmd", "gpu", "gpu7", "gpv",
|
||||
"sdio1", "slxa", "slxk", "uac";
|
||||
nvidia,pins = "atb", "cdev1", "cdev2", "dap1",
|
||||
"gma", "gmc", "gmd", "gpu", "gpu7",
|
||||
"gpv", "sdio1", "slxa", "slxk", "uac";
|
||||
nvidia,pull = <0>;
|
||||
nvidia,tristate = <0>;
|
||||
};
|
||||
conf_cdev2 {
|
||||
nvidia,pins = "cdev2", "csus", "spia", "spib",
|
||||
"spid", "spif";
|
||||
nvidia,pull = <1>;
|
||||
nvidia,tristate = <1>;
|
||||
};
|
||||
conf_ck32 {
|
||||
nvidia,pins = "ck32", "ddrc", "pmca", "pmcb",
|
||||
"pmcc", "pmcd", "pmce", "xm2c", "xm2d";
|
||||
nvidia,pull = <0>;
|
||||
};
|
||||
conf_csus {
|
||||
nvidia,pins = "csus", "spia", "spib",
|
||||
"spid", "spif";
|
||||
nvidia,pull = <1>;
|
||||
nvidia,tristate = <1>;
|
||||
};
|
||||
conf_ddc {
|
||||
nvidia,pins = "ddc", "dtf", "rm", "sdc", "sdd";
|
||||
nvidia,pull = <2>;
|
||||
|
@ -304,4 +304,8 @@
|
|||
cd-gpios = <&gpio 121 0>;
|
||||
wp-gpios = <&gpio 122 0>;
|
||||
};
|
||||
|
||||
usb@c5004000 {
|
||||
nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -335,4 +335,8 @@
|
|||
sdhci@c8000600 {
|
||||
support-8bit;
|
||||
};
|
||||
|
||||
usb@c5004000 {
|
||||
nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */
|
||||
};
|
||||
};
|
||||
|
|
|
@ -159,6 +159,8 @@ static void paz00_i2c_init(void)
|
|||
|
||||
static void paz00_usb_init(void)
|
||||
{
|
||||
tegra_ehci2_ulpi_phy_config.reset_gpio = TEGRA_ULPI_RST;
|
||||
|
||||
platform_device_register(&tegra_ehci2_device);
|
||||
platform_device_register(&tegra_ehci3_device);
|
||||
}
|
||||
|
@ -176,7 +178,6 @@ static __initdata struct tegra_clk_init_table paz00_clk_init_table[] = {
|
|||
{ "uarta", "pll_p", 216000000, true },
|
||||
{ "uartc", "pll_p", 216000000, true },
|
||||
|
||||
{ "pll_p_out4", "pll_p", 24000000, true },
|
||||
{ "usbd", "clk_m", 12000000, false },
|
||||
{ "usb2", "clk_m", 12000000, false },
|
||||
{ "usb3", "clk_m", 12000000, false },
|
||||
|
|
|
@ -117,6 +117,8 @@ static void trimslice_usb_init(void)
|
|||
pdata = tegra_ehci1_device.dev.platform_data;
|
||||
pdata->vbus_gpio = TRIMSLICE_GPIO_USB1_MODE;
|
||||
|
||||
tegra_ehci2_ulpi_phy_config.reset_gpio = TEGRA_GPIO_PV0;
|
||||
|
||||
platform_device_register(&tegra_ehci3_device);
|
||||
platform_device_register(&tegra_ehci2_device);
|
||||
platform_device_register(&tegra_ehci1_device);
|
||||
|
|
|
@ -82,10 +82,12 @@ static __initdata struct tegra_clk_init_table tegra20_clk_init_table[] = {
|
|||
{ "pll_p_out1", "pll_p", 28800000, true },
|
||||
{ "pll_p_out2", "pll_p", 48000000, true },
|
||||
{ "pll_p_out3", "pll_p", 72000000, true },
|
||||
{ "pll_p_out4", "pll_p", 108000000, true },
|
||||
{ "sclk", "pll_p_out4", 108000000, true },
|
||||
{ "hclk", "sclk", 108000000, true },
|
||||
{ "pclk", "hclk", 54000000, true },
|
||||
{ "pll_p_out4", "pll_p", 24000000, true },
|
||||
{ "pll_c", "clk_m", 600000000, true },
|
||||
{ "pll_c_out1", "pll_c", 120000000, true },
|
||||
{ "sclk", "pll_c_out1", 120000000, true },
|
||||
{ "hclk", "sclk", 120000000, true },
|
||||
{ "pclk", "hclk", 60000000, true },
|
||||
{ "csite", NULL, 0, true },
|
||||
{ "emc", NULL, 0, true },
|
||||
{ "cpu", NULL, 0, true },
|
||||
|
|
|
@ -439,9 +439,8 @@ static struct resource tegra_usb3_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct tegra_ulpi_config tegra_ehci2_ulpi_phy_config = {
|
||||
/* All existing boards use GPIO PV0 for phy reset */
|
||||
.reset_gpio = TEGRA_GPIO_PV0,
|
||||
struct tegra_ulpi_config tegra_ehci2_ulpi_phy_config = {
|
||||
.reset_gpio = -1,
|
||||
.clk = "cdev2",
|
||||
};
|
||||
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/platform_data/tegra_usb.h>
|
||||
|
||||
#include <mach/usb_phy.h>
|
||||
|
||||
extern struct tegra_ulpi_config tegra_ehci2_ulpi_phy_config;
|
||||
|
||||
extern struct tegra_ehci_platform_data tegra_ehci1_pdata;
|
||||
extern struct tegra_ehci_platform_data tegra_ehci2_pdata;
|
||||
extern struct tegra_ehci_platform_data tegra_ehci3_pdata;
|
||||
|
|
|
@ -61,8 +61,8 @@ struct tegra_usb_phy {
|
|||
struct usb_phy *ulpi;
|
||||
};
|
||||
|
||||
struct tegra_usb_phy *tegra_usb_phy_open(int instance, void __iomem *regs,
|
||||
void *config, enum tegra_usb_phy_mode phy_mode);
|
||||
struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
|
||||
void __iomem *regs, void *config, enum tegra_usb_phy_mode phy_mode);
|
||||
|
||||
int tegra_usb_phy_power_on(struct tegra_usb_phy *phy);
|
||||
|
||||
|
|
|
@ -1486,6 +1486,10 @@ static struct clk tegra_clk_m = {
|
|||
};
|
||||
|
||||
static struct clk_pll_freq_table tegra_pll_c_freq_table[] = {
|
||||
{ 12000000, 600000000, 600, 12, 1, 8 },
|
||||
{ 13000000, 600000000, 600, 13, 1, 8 },
|
||||
{ 19200000, 600000000, 500, 16, 1, 6 },
|
||||
{ 26000000, 600000000, 600, 26, 1, 8 },
|
||||
{ 0, 0, 0, 0, 0, 0 },
|
||||
};
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -654,8 +655,8 @@ static void ulpi_phy_power_off(struct tegra_usb_phy *phy)
|
|||
clk_disable(phy->clk);
|
||||
}
|
||||
|
||||
struct tegra_usb_phy *tegra_usb_phy_open(int instance, void __iomem *regs,
|
||||
void *config, enum tegra_usb_phy_mode phy_mode)
|
||||
struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
|
||||
void __iomem *regs, void *config, enum tegra_usb_phy_mode phy_mode)
|
||||
{
|
||||
struct tegra_usb_phy *phy;
|
||||
struct tegra_ulpi_config *ulpi_config;
|
||||
|
@ -711,6 +712,16 @@ struct tegra_usb_phy *tegra_usb_phy_open(int instance, void __iomem *regs,
|
|||
err = -ENXIO;
|
||||
goto err1;
|
||||
}
|
||||
if (!gpio_is_valid(ulpi_config->reset_gpio))
|
||||
ulpi_config->reset_gpio =
|
||||
of_get_named_gpio(dev->of_node,
|
||||
"nvidia,phy-reset-gpio", 0);
|
||||
if (!gpio_is_valid(ulpi_config->reset_gpio)) {
|
||||
pr_err("%s: invalid reset gpio: %d\n", __func__,
|
||||
ulpi_config->reset_gpio);
|
||||
err = -EINVAL;
|
||||
goto err1;
|
||||
}
|
||||
gpio_request(ulpi_config->reset_gpio, "ulpi_phy_reset_b");
|
||||
gpio_direction_output(ulpi_config->reset_gpio, 0);
|
||||
phy->ulpi = otg_ulpi_create(&ulpi_viewport_access_ops, 0);
|
||||
|
|
|
@ -708,8 +708,9 @@ static int tegra_ehci_probe(struct platform_device *pdev)
|
|||
}
|
||||
}
|
||||
|
||||
tegra->phy = tegra_usb_phy_open(instance, hcd->regs, pdata->phy_config,
|
||||
TEGRA_USB_PHY_MODE_HOST);
|
||||
tegra->phy = tegra_usb_phy_open(&pdev->dev, instance, hcd->regs,
|
||||
pdata->phy_config,
|
||||
TEGRA_USB_PHY_MODE_HOST);
|
||||
if (IS_ERR(tegra->phy)) {
|
||||
dev_err(&pdev->dev, "Failed to open USB phy\n");
|
||||
err = -ENXIO;
|
||||
|
|
Loading…
Reference in New Issue