usb: ulpi: add indicator configuration function
Subsystems (3)
PATCH v4 1/2 usb: ulpi: add indicator configuration function
Allows for easy configuration of the VBUS indicator related ULPI config bits.
Also move the external indicator setup from ulpi_set_vbus() to the new function.
---
v4:
- do r-m-w access on iface_ctrl register
- align with coding style of other ulpi functions
--- drivers/usb/ulpi/ulpi.c | 32 ++++++++++++++++++++++++++++---- include/usb/ulpi.h | 13 +++++++++++--
2 Dateien ge?ndert, 39 Zeilen hinzugef?gt(+), 6 Zeilen entfernt(-)
drivers/usb/ulpi/ulpi.c +28 -4
@@ -106,20 +106,44 @@ int ulpi_select_transceiver(struct ulpi_viewport *ulpi_vp, unsigned speed)return ulpi_write (ulpi_vp, &ulpi->function_ctrl, val); } -int ulpi_set_vbus (struct ulpi_viewport *ulpi_vp,int on,int ext_power, -int ext_ind) +int ulpi_set_vbus (struct ulpi_viewport *ulpi_vp,int on,int ext_power) {u32 flags =ULPI_OTG_DRVVBUS ;u8 *reg = on ? &ulpi->otg_ctrl_set : &ulpi->otg_ctrl_clear;if (ext_power) flags |=ULPI_OTG_DRVVBUS_EXT ; -if (ext_ind) - flags |=ULPI_OTG_EXTVBUSIND ;return ulpi_write (ulpi_vp, reg, flags); } +int ulpi_set_vbus_indicator (struct ulpi_viewport *ulpi_vp,int external, +int passthu,int complement) +{ +u32 flags, val; +u8 *reg; + + reg = external ? &ulpi->otg_ctrl_set : &ulpi->otg_ctrl_clear; + val =ulpi_write (ulpi_vp, reg,ULPI_OTG_EXTVBUSIND ); +if (val) +return val; + + flags = passthu ?ULPI_IFACE_PASSTHRU :0 ; + flags |= complement ?ULPI_IFACE_EXTVBUS_COMPLEMENT :0 ; + + val =ulpi_read (ulpi_vp, &ulpi->iface_ctrl); +if (val ==ULPI_ERROR ) +return val; + + val = val & ~(ULPI_IFACE_PASSTHRU &ULPI_IFACE_EXTVBUS_COMPLEMENT ); + val |= flags; + val =ulpi_write (ulpi_vp, &ulpi->iface_ctrl, val); +if (val) +return val; + +return 0 ; +} +int ulpi_set_pd (struct ulpi_viewport *ulpi_vp,int enable) {u32 val =ULPI_OTG_DP_PULLDOWN |ULPI_OTG_DM_PULLDOWN ;
include/usb/ulpi.h +11 -2
@@ -61,8 +61,17 @@ int ulpi_select_transceiver(struct ulpi_viewport *ulpi_vp, unsigned speed);* * returns 0 on success, ULPI_ERROR on failure. */ -int ulpi_set_vbus (struct ulpi_viewport *ulpi_vp, -int on,int ext_power,int ext_ind); +int ulpi_set_vbus (struct ulpi_viewport *ulpi_vp,int on,int ext_power); + +/* +* Configure VBUS indicator +* @external - external VBUS over-current indicator is used +* @passthru - disables ANDing of internal VBUS comparator +* with external VBUS input +* @complement - inverts the external VBUS input +*/ +int ulpi_set_vbus_indicator (struct ulpi_viewport *ulpi_vp,int external, +int passthru,int complement);/* * Enable/disable pull-down resistors on D+ and D- USB lines.
Signature · 1 line
1.7.11.4
PATCH v4 2/2 tegra20: add USB ULPI init code
This adds the required code to set up a ULPI USB port. It is mostly a port of the Linux ULPI setup code with some tweaks added for more correctness, discovered along the way of debugging this.
To use this both CONFIG_USB_ULPI and CONFIG_USB_ULPI_VIEWPORT have to be set in the board configuration file.
---
v2:
- move all controller init stuff in the respective functions to make them self contained
- let board define ULPI_REF_CLK to account for the possibility that some ULPI phys need a other ref clk than 24MHz
- don't touch ULPI regs directly, use ULPI framework functions
- don't hide error messages under debug()
v3:
- apply last comments from Igor, which make code still a bit cleaner
- add description of CONFIG_ULPI_REF_CLK to README
v4:
- fix typos spotted by Igor
--- README | 3 + arch/arm/cpu/armv7/tegra20/usb.c | 153 +++++++++++++++++++++++++++----- arch/arm/include/asm/arch-tegra20/usb.h | 29 ++++--
3 Dateien ge?ndert, 158 Zeilen hinzugef?gt(+), 27 Zeilen entfernt(-)
README +3 -0
@@ -1264,6 +1264,9 @@ The following options need to be configured: viewport is supported. To enable the ULPI layer support, define CONFIG_USB_ULPI and CONFIG_USB_ULPI_VIEWPORT in your board configuration file. + If your ULPI phy needs a different reference clock than the + standard 24 MHz then you have to define CONFIG_ULPI_REF_CLK to + the appropriate value in Hz. - MMC Support: The MMC controller on the Intel PXA is supported. To
arch/arm/cpu/armv7/tegra20/usb.c +131 -22
216 lines not on this page · raw message
arch/arm/include/asm/arch-tegra20/usb.h +24 -5
@@ -100,10 +100,12 @@ struct usb_ctlr {/* 0x410 */ uint usb1_legacy_ctrl; -uint reserved12[3 ]; +uint reserved12[4 ]; -/* 0x420 */ -uint reserved13[56 ]; +/* 0x424 */ +uint ulpi_timing_ctrl_0; +uint ulpi_timing_ctrl_1; +uint reserved13[53 ];/* 0x500 */ uint reserved14[64 *3 ];
@@ -144,10 +146,24 @@ struct usb_ctlr {#define VBUS_SENSE_CTL_AB_SESS_VLD 2#define VBUS_SENSE_CTL_A_SESS_VLD 3 +/* USB2_IF_ULPI_TIMING_CTRL_0 */ +#define ULPI_OUTPUT_PINMUX_BYP (1 << 10) +#define ULPI_CLKOUT_PINMUX_BYP (1 << 11) + +/* USB2_IF_ULPI_TIMING_CTRL_1 */ +#define ULPI_DATA_TRIMMER_LOAD (1 << 0) +#define ULPI_DATA_TRIMMER_SEL (x) (((x) & 0x7) << 1) +#define ULPI_STPDIRNXT_TRIMMER_LOAD (1 << 16) +#define ULPI_STPDIRNXT_TRIMMER_SEL (x) (((x) & 0x7) << 17) +#define ULPI_DIR_TRIMMER_LOAD (1 << 24) +#define ULPI_DIR_TRIMMER_SEL (x) (((x) & 0x7) << 25) +/* USBx_IF_USB_SUSP_CTRL_0 */ +#define ULPI_PHY_ENB (1 << 13)#define UTMIP_PHY_ENB (1 << 12)#define UTMIP_RESET (1 << 11)#define USB_PHY_CLK_VALID (1 << 7) +#define USB_SUSP_CLR (1 << 5)/* USBx_UTMIP_MISC_CFG1 */ #define UTMIP_PLLU_STABLE_COUNT_SHIFT 6
@@ -203,12 +219,15 @@ struct usb_ctlr {/* SB2_CONTROLLER_2_USB2D_PORTSC1_0 */ #define PTS_SHIFT 30#define PTS_MASK (3U << PTS_SHIFT) -#define PTS_UTMI 0 +#define PTS_UTMI 0#define PTS_RESERVED 1 -#define PTS_ULP 2 +#define PTS_ULPI 2#define PTS_ICUSB_SER 3#define STS (1 << 29) +#define WKOC (1 << 22) +#define WKDS (1 << 21) +#define WKCN (1 << 20)/* USBx_UTMIP_XCVR_CFG0_0 */ #define UTMIP_FORCE_PD_POWERDOWN (1 << 14)
Signature · 1 line
1.7.11.4
PATCH v4 2/2 tegra20: add USB ULPI init code
Dear Lucas Stach,
Quoted 4 lines
This adds the required code to set up a ULPI USB port. It is mostly a port of the Linux ULPI setup code with some tweaks added for more correctness, discovered along the way of debugging this.
[...]
Applied both, waiting for build.
Best regards,
Marek Vasut