mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
sunxi: usb-phy: Add support for reading otg id pin value
Add support for reading the id pin value of the otg connector to the usb phy code. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Ian Campbell <ijc@hellion.org.uk>
This commit is contained in:
parent
de1502c937
commit
48c06c98ec
3 changed files with 42 additions and 0 deletions
|
@ -44,6 +44,7 @@ static struct sunxi_usb_phy {
|
|||
int usb_rst_mask;
|
||||
int gpio_vbus;
|
||||
int gpio_vbus_det;
|
||||
int gpio_id_det;
|
||||
int id;
|
||||
int init_count;
|
||||
int power_on_count;
|
||||
|
@ -82,6 +83,14 @@ static int get_vbus_detect_gpio(int index)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int get_id_detect_gpio(int index)
|
||||
{
|
||||
switch (index) {
|
||||
case 0: return sunxi_name_to_gpio(CONFIG_USB0_ID_DET);
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void usb_phy_write(struct sunxi_usb_phy *phy, int addr,
|
||||
int data, int len)
|
||||
{
|
||||
|
@ -247,6 +256,16 @@ int sunxi_usb_phy_vbus_detect(int index)
|
|||
return err;
|
||||
}
|
||||
|
||||
int sunxi_usb_phy_id_detect(int index)
|
||||
{
|
||||
struct sunxi_usb_phy *phy = &sunxi_usb_phy[index];
|
||||
|
||||
if (phy->gpio_id_det < 0)
|
||||
return phy->gpio_id_det;
|
||||
|
||||
return gpio_get_value(phy->gpio_id_det);
|
||||
}
|
||||
|
||||
int sunxi_usb_phy_probe(void)
|
||||
{
|
||||
struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
|
||||
|
@ -275,6 +294,18 @@ int sunxi_usb_phy_probe(void)
|
|||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
phy->gpio_id_det = get_id_detect_gpio(i);
|
||||
if (phy->gpio_id_det >= 0) {
|
||||
ret = gpio_request(phy->gpio_id_det, "usb_id_det");
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = gpio_direction_input(phy->gpio_id_det);
|
||||
if (ret)
|
||||
return ret;
|
||||
sunxi_gpio_set_pull(phy->gpio_id_det,
|
||||
SUNXI_GPIO_PULL_UP);
|
||||
}
|
||||
}
|
||||
|
||||
setbits_le32(&ccm->usb_clk_cfg, CCM_USB_CTRL_PHYGATE);
|
||||
|
@ -298,6 +329,9 @@ int sunxi_usb_phy_remove(void)
|
|||
|
||||
if (phy->gpio_vbus_det >= 0)
|
||||
gpio_free(phy->gpio_vbus_det);
|
||||
|
||||
if (phy->gpio_id_det >= 0)
|
||||
gpio_free(phy->gpio_id_det);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -17,4 +17,5 @@ void sunxi_usb_phy_exit(int index);
|
|||
void sunxi_usb_phy_power_on(int index);
|
||||
void sunxi_usb_phy_power_off(int index);
|
||||
int sunxi_usb_phy_vbus_detect(int index);
|
||||
int sunxi_usb_phy_id_detect(int index);
|
||||
void sunxi_usb_phy_enable_squelch_detect(int index, int enable);
|
||||
|
|
|
@ -294,6 +294,13 @@ config USB0_VBUS_DET
|
|||
Set the Vbus detect pin for usb0 (otg). This takes a string in the
|
||||
format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
|
||||
|
||||
config USB0_ID_DET
|
||||
string "ID detect pin for usb0 (otg)"
|
||||
default ""
|
||||
---help---
|
||||
Set the ID detect pin for usb0 (otg). This takes a string in the
|
||||
format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
|
||||
|
||||
config USB1_VBUS_PIN
|
||||
string "Vbus enable pin for usb1 (ehci0)"
|
||||
default "PH6" if MACH_SUN4I || MACH_SUN7I
|
||||
|
|
Loading…
Reference in a new issue