hc
2024-05-16 8d2a02b24d66aa359e83eebc1ed3c0f85367a1cb
kernel/drivers/phy/broadcom/phy-brcm-usb-init.c
....@@ -1,16 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * phy-brcm-usb-init.c - Broadcom USB Phy chip specific init functions
34 *
45 * Copyright (C) 2014-2017 Broadcom
5
- *
6
- * This software is licensed under the terms of the GNU General Public
7
- * License version 2, as published by the Free Software Foundation, and
8
- * may be copied, distributed, and modified under those terms.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
146 */
157
168 /*
....@@ -50,6 +42,7 @@
5042 #define USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK 0x80000000 /* option */
5143 #define USB_CTRL_EBRIDGE 0x0c
5244 #define USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK 0x00020000 /* option */
45
+#define USB_CTRL_EBRIDGE_EBR_SCB_SIZE_MASK 0x00000f80 /* option */
5346 #define USB_CTRL_OBRIDGE 0x10
5447 #define USB_CTRL_OBRIDGE_LS_KEEP_ALIVE_MASK 0x08000000
5548 #define USB_CTRL_MDIO 0x14
....@@ -65,6 +58,8 @@
6558 #define USB_CTRL_USB_PM_SOFT_RESET_MASK 0x40000000 /* option */
6659 #define USB_CTRL_USB_PM_USB20_HC_RESETB_MASK 0x30000000 /* option */
6760 #define USB_CTRL_USB_PM_USB20_HC_RESETB_VAR_MASK 0x00300000 /* option */
61
+#define USB_CTRL_USB_PM_RMTWKUP_EN_MASK 0x00000001
62
+#define USB_CTRL_USB_PM_STATUS 0x38
6863 #define USB_CTRL_USB30_CTL1 0x60
6964 #define USB_CTRL_USB30_CTL1_PHY3_PLL_SEQ_START_MASK 0x00000010
7065 #define USB_CTRL_USB30_CTL1_PHY3_RESETB_MASK 0x00010000
....@@ -134,10 +129,6 @@
134129 USB_CTRL_SELECTOR_COUNT,
135130 };
136131
137
-#define USB_CTRL_REG(base, reg) ((void *)base + USB_CTRL_##reg)
138
-#define USB_XHCI_EC_REG(base, reg) ((void *)base + USB_XHCI_EC_##reg)
139
-#define USB_CTRL_MASK(reg, field) \
140
- USB_CTRL_##reg##_##field##_MASK
141132 #define USB_CTRL_MASK_FAMILY(params, reg, field) \
142133 (params->usb_reg_bits_map[USB_CTRL_##reg##_##field##_SELECTOR])
143134
....@@ -147,13 +138,6 @@
147138 #define USB_CTRL_UNSET_FAMILY(params, reg, field) \
148139 usb_ctrl_unset_family(params, USB_CTRL_##reg, \
149140 USB_CTRL_##reg##_##field##_SELECTOR)
150
-
151
-#define USB_CTRL_SET(base, reg, field) \
152
- usb_ctrl_set(USB_CTRL_REG(base, reg), \
153
- USB_CTRL_##reg##_##field##_MASK)
154
-#define USB_CTRL_UNSET(base, reg, field) \
155
- usb_ctrl_unset(USB_CTRL_REG(base, reg), \
156
- USB_CTRL_##reg##_##field##_MASK)
157141
158142 #define MDIO_USB2 0
159143 #define MDIO_USB3 BIT(31)
....@@ -184,6 +168,7 @@
184168 { 0x33900000, BRCM_FAMILY_3390A0 },
185169 { 0x72500010, BRCM_FAMILY_7250B0 },
186170 { 0x72600000, BRCM_FAMILY_7260A0 },
171
+ { 0x72550000, BRCM_FAMILY_7260A0 },
187172 { 0x72680000, BRCM_FAMILY_7271A0 },
188173 { 0x72710000, BRCM_FAMILY_7271A0 },
189174 { 0x73640000, BRCM_FAMILY_7364A0 },
....@@ -409,26 +394,14 @@
409394 },
410395 };
411396
412
-static inline u32 brcmusb_readl(void __iomem *addr)
413
-{
414
- return readl(addr);
415
-}
416
-
417
-static inline void brcmusb_writel(u32 val, void __iomem *addr)
418
-{
419
- writel(val, addr);
420
-}
421
-
422397 static inline
423398 void usb_ctrl_unset_family(struct brcm_usb_init_params *params,
424399 u32 reg_offset, u32 field)
425400 {
426401 u32 mask;
427
- void *reg;
428402
429403 mask = params->usb_reg_bits_map[field];
430
- reg = params->ctrl_regs + reg_offset;
431
- brcmusb_writel(brcmusb_readl(reg) & ~mask, reg);
404
+ brcm_usb_ctrl_unset(params->regs[BRCM_REGS_CTRL] + reg_offset, mask);
432405 };
433406
434407 static inline
....@@ -436,45 +409,27 @@
436409 u32 reg_offset, u32 field)
437410 {
438411 u32 mask;
439
- void *reg;
440412
441413 mask = params->usb_reg_bits_map[field];
442
- reg = params->ctrl_regs + reg_offset;
443
- brcmusb_writel(brcmusb_readl(reg) | mask, reg);
414
+ brcm_usb_ctrl_set(params->regs[BRCM_REGS_CTRL] + reg_offset, mask);
444415 };
445
-
446
-static inline void usb_ctrl_set(void __iomem *reg, u32 field)
447
-{
448
- u32 value;
449
-
450
- value = brcmusb_readl(reg);
451
- brcmusb_writel(value | field, reg);
452
-}
453
-
454
-static inline void usb_ctrl_unset(void __iomem *reg, u32 field)
455
-{
456
- u32 value;
457
-
458
- value = brcmusb_readl(reg);
459
- brcmusb_writel(value & ~field, reg);
460
-}
461416
462417 static u32 brcmusb_usb_mdio_read(void __iomem *ctrl_base, u32 reg, int mode)
463418 {
464419 u32 data;
465420
466421 data = (reg << 16) | mode;
467
- brcmusb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
422
+ brcm_usb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
468423 data |= (1 << 24);
469
- brcmusb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
424
+ brcm_usb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
470425 data &= ~(1 << 24);
471426 /* wait for the 60MHz parallel to serial shifter */
472427 usleep_range(10, 20);
473
- brcmusb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
428
+ brcm_usb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
474429 /* wait for the 60MHz parallel to serial shifter */
475430 usleep_range(10, 20);
476431
477
- return brcmusb_readl(USB_CTRL_REG(ctrl_base, MDIO2)) & 0xffff;
432
+ return brcm_usb_readl(USB_CTRL_REG(ctrl_base, MDIO2)) & 0xffff;
478433 }
479434
480435 static void brcmusb_usb_mdio_write(void __iomem *ctrl_base, u32 reg,
....@@ -483,14 +438,14 @@
483438 u32 data;
484439
485440 data = (reg << 16) | val | mode;
486
- brcmusb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
441
+ brcm_usb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
487442 data |= (1 << 25);
488
- brcmusb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
443
+ brcm_usb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
489444 data &= ~(1 << 25);
490445
491446 /* wait for the 60MHz parallel to serial shifter */
492447 usleep_range(10, 20);
493
- brcmusb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
448
+ brcm_usb_writel(data, USB_CTRL_REG(ctrl_base, MDIO));
494449 /* wait for the 60MHz parallel to serial shifter */
495450 usleep_range(10, 20);
496451 }
....@@ -589,7 +544,7 @@
589544 {
590545 u32 ofs;
591546 int ii;
592
- void __iomem *ctrl_base = params->ctrl_regs;
547
+ void __iomem *ctrl_base = params->regs[BRCM_REGS_CTRL];
593548
594549 /*
595550 * On newer B53 based SoC's, the reference clock for the
....@@ -670,7 +625,7 @@
670625
671626 static void brcmusb_usb3_phy_workarounds(struct brcm_usb_init_params *params)
672627 {
673
- void __iomem *ctrl_base = params->ctrl_regs;
628
+ void __iomem *ctrl_base = params->regs[BRCM_REGS_CTRL];
674629
675630 brcmusb_usb3_pll_fix(ctrl_base);
676631 brcmusb_usb3_pll_54mhz(params);
....@@ -712,21 +667,21 @@
712667
713668 static void brcmusb_usb3_otp_fix(struct brcm_usb_init_params *params)
714669 {
715
- void __iomem *xhci_ec_base = params->xhci_ec_regs;
670
+ void __iomem *xhci_ec_base = params->regs[BRCM_REGS_XHCI_EC];
716671 u32 val;
717672
718
- if (params->family_id != 0x74371000 || xhci_ec_base == 0)
673
+ if (params->family_id != 0x74371000 || !xhci_ec_base)
719674 return;
720
- brcmusb_writel(0xa20c, USB_XHCI_EC_REG(xhci_ec_base, IRAADR));
721
- val = brcmusb_readl(USB_XHCI_EC_REG(xhci_ec_base, IRADAT));
675
+ brcm_usb_writel(0xa20c, USB_XHCI_EC_REG(xhci_ec_base, IRAADR));
676
+ val = brcm_usb_readl(USB_XHCI_EC_REG(xhci_ec_base, IRADAT));
722677
723678 /* set cfg_pick_ss_lock */
724679 val |= (1 << 27);
725
- brcmusb_writel(val, USB_XHCI_EC_REG(xhci_ec_base, IRADAT));
680
+ brcm_usb_writel(val, USB_XHCI_EC_REG(xhci_ec_base, IRADAT));
726681
727682 /* Reset USB 3.0 PHY for workaround to take effect */
728
- USB_CTRL_UNSET(params->ctrl_regs, USB30_CTL1, PHY3_RESETB);
729
- USB_CTRL_SET(params->ctrl_regs, USB30_CTL1, PHY3_RESETB);
683
+ USB_CTRL_UNSET(params->regs[BRCM_REGS_CTRL], USB30_CTL1, PHY3_RESETB);
684
+ USB_CTRL_SET(params->regs[BRCM_REGS_CTRL], USB30_CTL1, PHY3_RESETB);
730685 }
731686
732687 static void brcmusb_xhci_soft_reset(struct brcm_usb_init_params *params,
....@@ -755,7 +710,7 @@
755710 * - default chip/rev.
756711 * NOTE: The minor rev is always ignored.
757712 */
758
-static enum brcm_family_type brcmusb_get_family_type(
713
+static enum brcm_family_type get_family_type(
759714 struct brcm_usb_init_params *params)
760715 {
761716 int last_type = -1;
....@@ -783,9 +738,9 @@
783738 return last_type;
784739 }
785740
786
-void brcm_usb_init_ipp(struct brcm_usb_init_params *params)
741
+static void usb_init_ipp(struct brcm_usb_init_params *params)
787742 {
788
- void __iomem *ctrl = params->ctrl_regs;
743
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
789744 u32 reg;
790745 u32 orig_reg;
791746
....@@ -799,7 +754,7 @@
799754 USB_CTRL_SET_FAMILY(params, USB30_CTL1, USB3_IPP);
800755 }
801756
802
- reg = brcmusb_readl(USB_CTRL_REG(ctrl, SETUP));
757
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, SETUP));
803758 orig_reg = reg;
804759 if (USB_CTRL_MASK_FAMILY(params, SETUP, STRAP_CC_DRD_MODE_ENABLE_SEL))
805760 /* Never use the strap, it's going away. */
....@@ -807,8 +762,8 @@
807762 SETUP,
808763 STRAP_CC_DRD_MODE_ENABLE_SEL));
809764 if (USB_CTRL_MASK_FAMILY(params, SETUP, STRAP_IPP_SEL))
765
+ /* override ipp strap pin (if it exits) */
810766 if (params->ipp != 2)
811
- /* override ipp strap pin (if it exits) */
812767 reg &= ~(USB_CTRL_MASK_FAMILY(params, SETUP,
813768 STRAP_IPP_SEL));
814769
....@@ -816,50 +771,38 @@
816771 reg &= ~(USB_CTRL_MASK(SETUP, IPP) | USB_CTRL_MASK(SETUP, IOC));
817772 if (params->ioc)
818773 reg |= USB_CTRL_MASK(SETUP, IOC);
819
- if (params->ipp == 1 && ((reg & USB_CTRL_MASK(SETUP, IPP)) == 0))
774
+ if (params->ipp == 1)
820775 reg |= USB_CTRL_MASK(SETUP, IPP);
821
- brcmusb_writel(reg, USB_CTRL_REG(ctrl, SETUP));
776
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, SETUP));
822777
823778 /*
824779 * If we're changing IPP, make sure power is off long enough
825780 * to turn off any connected devices.
826781 */
827
- if (reg != orig_reg)
782
+ if ((reg ^ orig_reg) & USB_CTRL_MASK(SETUP, IPP))
828783 msleep(50);
829784 }
830785
831
-int brcm_usb_init_get_dual_select(struct brcm_usb_init_params *params)
786
+static void usb_wake_enable(struct brcm_usb_init_params *params,
787
+ bool enable)
832788 {
833
- void __iomem *ctrl = params->ctrl_regs;
834
- u32 reg = 0;
789
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
835790
836
- if (USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1, PORT_MODE)) {
837
- reg = brcmusb_readl(USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
838
- reg &= USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1,
839
- PORT_MODE);
840
- }
841
- return reg;
791
+ if (enable)
792
+ USB_CTRL_SET(ctrl, USB_PM, RMTWKUP_EN);
793
+ else
794
+ USB_CTRL_UNSET(ctrl, USB_PM, RMTWKUP_EN);
842795 }
843796
844
-void brcm_usb_init_set_dual_select(struct brcm_usb_init_params *params,
845
- int mode)
846
-{
847
- void __iomem *ctrl = params->ctrl_regs;
848
- u32 reg;
849
-
850
- if (USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1, PORT_MODE)) {
851
- reg = brcmusb_readl(USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
852
- reg &= ~USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1,
853
- PORT_MODE);
854
- reg |= mode;
855
- brcmusb_writel(reg, USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
856
- }
857
-}
858
-
859
-void brcm_usb_init_common(struct brcm_usb_init_params *params)
797
+static void usb_init_common(struct brcm_usb_init_params *params)
860798 {
861799 u32 reg;
862
- void __iomem *ctrl = params->ctrl_regs;
800
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
801
+
802
+ /* Clear any pending wake conditions */
803
+ usb_wake_enable(params, false);
804
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, USB_PM_STATUS));
805
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, USB_PM_STATUS));
863806
864807 /* Take USB out of power down */
865808 if (USB_CTRL_MASK_FAMILY(params, PLL_CTL, PLL_IDDQ_PWRDN)) {
....@@ -885,7 +828,7 @@
885828 /* Block auto PLL suspend by USB2 PHY (Sasi) */
886829 USB_CTRL_SET(ctrl, PLL_CTL, PLL_SUSPEND_EN);
887830
888
- reg = brcmusb_readl(USB_CTRL_REG(ctrl, SETUP));
831
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, SETUP));
889832 if (params->selected_family == BRCM_FAMILY_7364A0)
890833 /* Suppress overcurrent indication from USB30 ports for A0 */
891834 reg |= USB_CTRL_MASK_FAMILY(params, SETUP, OC3_DISABLE);
....@@ -901,16 +844,16 @@
901844 reg |= USB_CTRL_MASK_FAMILY(params, SETUP, SCB1_EN);
902845 if (USB_CTRL_MASK_FAMILY(params, SETUP, SCB2_EN))
903846 reg |= USB_CTRL_MASK_FAMILY(params, SETUP, SCB2_EN);
904
- brcmusb_writel(reg, USB_CTRL_REG(ctrl, SETUP));
847
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, SETUP));
905848
906849 brcmusb_memc_fix(params);
907850
908851 if (USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1, PORT_MODE)) {
909
- reg = brcmusb_readl(USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
852
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
910853 reg &= ~USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1,
911854 PORT_MODE);
912855 reg |= params->mode;
913
- brcmusb_writel(reg, USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
856
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
914857 }
915858 if (USB_CTRL_MASK_FAMILY(params, USB_PM, BDC_SOFT_RESETB)) {
916859 switch (params->mode) {
....@@ -932,10 +875,10 @@
932875 }
933876 }
934877
935
-void brcm_usb_init_eohci(struct brcm_usb_init_params *params)
878
+static void usb_init_eohci(struct brcm_usb_init_params *params)
936879 {
937880 u32 reg;
938
- void __iomem *ctrl = params->ctrl_regs;
881
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
939882
940883 if (USB_CTRL_MASK_FAMILY(params, USB_PM, USB20_HC_RESETB))
941884 USB_CTRL_SET_FAMILY(params, USB_PM, USB20_HC_RESETB);
....@@ -948,19 +891,30 @@
948891 USB_CTRL_SET(ctrl, EBRIDGE, ESTOP_SCB_REQ);
949892
950893 /* Setup the endian bits */
951
- reg = brcmusb_readl(USB_CTRL_REG(ctrl, SETUP));
894
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, SETUP));
952895 reg &= ~USB_CTRL_SETUP_ENDIAN_BITS;
953896 reg |= USB_CTRL_MASK_FAMILY(params, SETUP, ENDIAN);
954
- brcmusb_writel(reg, USB_CTRL_REG(ctrl, SETUP));
897
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, SETUP));
955898
956899 if (params->selected_family == BRCM_FAMILY_7271A0)
957900 /* Enable LS keep alive fix for certain keyboards */
958901 USB_CTRL_SET(ctrl, OBRIDGE, LS_KEEP_ALIVE);
902
+
903
+ if (params->family_id == 0x72550000) {
904
+ /*
905
+ * Make the burst size 512 bytes to fix a hardware bug
906
+ * on the 7255a0. See HW7255-24.
907
+ */
908
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, EBRIDGE));
909
+ reg &= ~USB_CTRL_MASK(EBRIDGE, EBR_SCB_SIZE);
910
+ reg |= 0x800;
911
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, EBRIDGE));
912
+ }
959913 }
960914
961
-void brcm_usb_init_xhci(struct brcm_usb_init_params *params)
915
+static void usb_init_xhci(struct brcm_usb_init_params *params)
962916 {
963
- void __iomem *ctrl = params->ctrl_regs;
917
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
964918
965919 USB_CTRL_UNSET(ctrl, USB30_PCTL, PHY3_IDDQ_OVERRIDE);
966920 /* 1 millisecond - for USB clocks to settle down */
....@@ -986,34 +940,80 @@
986940 brcmusb_usb3_otp_fix(params);
987941 }
988942
989
-void brcm_usb_uninit_common(struct brcm_usb_init_params *params)
943
+static void usb_uninit_common(struct brcm_usb_init_params *params)
990944 {
991945 if (USB_CTRL_MASK_FAMILY(params, USB_PM, USB_PWRDN))
992946 USB_CTRL_SET_FAMILY(params, USB_PM, USB_PWRDN);
993947
994948 if (USB_CTRL_MASK_FAMILY(params, PLL_CTL, PLL_IDDQ_PWRDN))
995949 USB_CTRL_SET_FAMILY(params, PLL_CTL, PLL_IDDQ_PWRDN);
950
+ if (params->wake_enabled)
951
+ usb_wake_enable(params, true);
996952 }
997953
998
-void brcm_usb_uninit_eohci(struct brcm_usb_init_params *params)
954
+static void usb_uninit_eohci(struct brcm_usb_init_params *params)
999955 {
1000
- if (USB_CTRL_MASK_FAMILY(params, USB_PM, USB20_HC_RESETB))
1001
- USB_CTRL_UNSET_FAMILY(params, USB_PM, USB20_HC_RESETB);
1002956 }
1003957
1004
-void brcm_usb_uninit_xhci(struct brcm_usb_init_params *params)
958
+static void usb_uninit_xhci(struct brcm_usb_init_params *params)
1005959 {
1006960 brcmusb_xhci_soft_reset(params, 1);
1007
- USB_CTRL_SET(params->ctrl_regs, USB30_PCTL, PHY3_IDDQ_OVERRIDE);
961
+ USB_CTRL_SET(params->regs[BRCM_REGS_CTRL], USB30_PCTL,
962
+ PHY3_IDDQ_OVERRIDE);
1008963 }
1009964
1010
-void brcm_usb_set_family_map(struct brcm_usb_init_params *params)
965
+static int usb_get_dual_select(struct brcm_usb_init_params *params)
966
+{
967
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
968
+ u32 reg = 0;
969
+
970
+ pr_debug("%s\n", __func__);
971
+ if (USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1, PORT_MODE)) {
972
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
973
+ reg &= USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1,
974
+ PORT_MODE);
975
+ }
976
+ return reg;
977
+}
978
+
979
+static void usb_set_dual_select(struct brcm_usb_init_params *params, int mode)
980
+{
981
+ void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
982
+ u32 reg;
983
+
984
+ pr_debug("%s\n", __func__);
985
+
986
+ if (USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1, PORT_MODE)) {
987
+ reg = brcm_usb_readl(USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
988
+ reg &= ~USB_CTRL_MASK_FAMILY(params, USB_DEVICE_CTL1,
989
+ PORT_MODE);
990
+ reg |= mode;
991
+ brcm_usb_writel(reg, USB_CTRL_REG(ctrl, USB_DEVICE_CTL1));
992
+ }
993
+}
994
+
995
+static const struct brcm_usb_init_ops bcm7445_ops = {
996
+ .init_ipp = usb_init_ipp,
997
+ .init_common = usb_init_common,
998
+ .init_eohci = usb_init_eohci,
999
+ .init_xhci = usb_init_xhci,
1000
+ .uninit_common = usb_uninit_common,
1001
+ .uninit_eohci = usb_uninit_eohci,
1002
+ .uninit_xhci = usb_uninit_xhci,
1003
+ .get_dual_select = usb_get_dual_select,
1004
+ .set_dual_select = usb_set_dual_select,
1005
+};
1006
+
1007
+void brcm_usb_dvr_init_7445(struct brcm_usb_init_params *params)
10111008 {
10121009 int fam;
10131010
1014
- fam = brcmusb_get_family_type(params);
1011
+ pr_debug("%s\n", __func__);
1012
+
1013
+ fam = get_family_type(params);
10151014 params->selected_family = fam;
10161015 params->usb_reg_bits_map =
10171016 &usb_reg_bits_map_table[fam][0];
10181017 params->family_name = family_names[fam];
1018
+ params->ops = &bcm7445_ops;
10191019 }