4343#define USB_CTRL_SETUP_tca_drv_sel_MASK BIT(24)
4444#define USB_CTRL_SETUP_STRAP_IPP_SEL_MASK BIT(25)
4545#define USB_CTRL_USB_PM 0x04
46+ #define USB_CTRL_USB_PM_REF_S2_CLK_SWITCH_EN_MASK BIT(1)
47+ #define USB_CTRL_USB_PM_UTMI_S2_CLK_SWITCH_EN_MASK BIT(2)
4648#define USB_CTRL_USB_PM_XHC_S2_CLK_SWITCH_EN_MASK BIT(3)
4749#define USB_CTRL_USB_PM_XHC_PME_EN_MASK BIT(4)
4850#define USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK BIT(22)
6163#define USB_CTRL_CTLR_CSHCR_ctl_pme_en_MASK BIT(18)
6264#define USB_CTRL_P0_U2PHY_CFG1 0x68
6365#define USB_CTRL_P0_U2PHY_CFG1_COMMONONN_MASK BIT(10)
66+ #define USB_CTRL_P0_U2PHY_CFG2 0x6c
67+ #define USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_MASK GENMASK(20, 17)
68+ #define USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_SHIFT 17
69+ #define USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_MASK GENMASK(24, 23)
70+ #define USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_SHIFT 23
71+ #define USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_MASK GENMASK(26, 25)
72+ #define USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_SHIFT 25
6473
6574/* Register definitions for the USB_PHY block in 7211b0 */
6675#define USB_PHY_PLL_CTL 0x00
@@ -369,6 +378,42 @@ static void usb_uninit_common_7216(struct brcm_usb_init_params *params)
369378 }
370379}
371380
381+ static void usb_init_common_74110 (struct brcm_usb_init_params * params )
382+ {
383+ void __iomem * ctrl = params -> regs [BRCM_REGS_CTRL ];
384+ u32 reg ;
385+
386+ reg = brcm_usb_readl (USB_CTRL_REG (ctrl , USB_PM ));
387+ reg &= ~(USB_CTRL_MASK (USB_PM , REF_S2_CLK_SWITCH_EN ) |
388+ USB_CTRL_MASK (USB_PM , UTMI_S2_CLK_SWITCH_EN ));
389+ brcm_usb_writel (reg , USB_CTRL_REG (ctrl , USB_PM ));
390+
391+ usb_init_common_7216 (params );
392+
393+ reg = brcm_usb_readl (USB_CTRL_REG (ctrl , P0_U2PHY_CFG2 ));
394+ reg &= ~(USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_MASK |
395+ USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_MASK |
396+ USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_MASK );
397+ reg |= (0x6 << USB_CTRL_P0_U2PHY_CFG2_TXVREFTUNE0_SHIFT ) |
398+ (0x3 << USB_CTRL_P0_U2PHY_CFG2_TXRESTUNE0_SHIFT ) |
399+ (0x2 << USB_CTRL_P0_U2PHY_CFG2_TXPREEMPAMPTUNE0_SHIFT );
400+ brcm_usb_writel (reg , USB_CTRL_REG (ctrl , P0_U2PHY_CFG2 ));
401+ }
402+
403+ static void usb_uninit_common_74110 (struct brcm_usb_init_params * params )
404+ {
405+ void __iomem * ctrl = params -> regs [BRCM_REGS_CTRL ];
406+ u32 reg ;
407+
408+ if (params -> wake_enabled ) {
409+ reg = brcm_usb_readl (USB_CTRL_REG (ctrl , USB_PM ));
410+ reg |= (USB_CTRL_MASK (USB_PM , REF_S2_CLK_SWITCH_EN ) |
411+ USB_CTRL_MASK (USB_PM , UTMI_S2_CLK_SWITCH_EN ));
412+ brcm_usb_writel (reg , USB_CTRL_REG (ctrl , USB_PM ));
413+ }
414+ usb_uninit_common_7216 (params );
415+ }
416+
372417static void usb_uninit_common_7211b0 (struct brcm_usb_init_params * params )
373418{
374419 void __iomem * ctrl = params -> regs [BRCM_REGS_CTRL ];
@@ -426,6 +471,16 @@ static void usb_set_dual_select(struct brcm_usb_init_params *params)
426471 brcm_usb_writel (reg , USB_CTRL_REG (ctrl , USB_DEVICE_CTL1 ));
427472}
428473
474+ static const struct brcm_usb_init_ops bcm74110_ops = {
475+ .init_ipp = usb_init_ipp ,
476+ .init_common = usb_init_common_74110 ,
477+ .init_xhci = usb_init_xhci ,
478+ .uninit_common = usb_uninit_common_74110 ,
479+ .uninit_xhci = usb_uninit_xhci ,
480+ .get_dual_select = usb_get_dual_select ,
481+ .set_dual_select = usb_set_dual_select ,
482+ };
483+
429484static const struct brcm_usb_init_ops bcm7216_ops = {
430485 .init_ipp = usb_init_ipp ,
431486 .init_common = usb_init_common_7216 ,
@@ -446,6 +501,12 @@ static const struct brcm_usb_init_ops bcm7211b0_ops = {
446501 .set_dual_select = usb_set_dual_select ,
447502};
448503
504+ void brcm_usb_dvr_init_74110 (struct brcm_usb_init_params * params )
505+ {
506+ params -> family_name = "74110" ;
507+ params -> ops = & bcm74110_ops ;
508+ }
509+
449510void brcm_usb_dvr_init_7216 (struct brcm_usb_init_params * params )
450511{
451512
0 commit comments