2828#define EUSB2_TUNE_SQUELCH_U 0x54
2929#define EUSB2_TUNE_USB2_PREEM 0x57
3030
31- #define QCOM_EUSB2_REPEATER_INIT_CFG (o , v ) \
31+ #define QCOM_EUSB2_REPEATER_INIT_CFG (r , v ) \
3232 { \
33- .offset = o , \
33+ .reg = r , \
3434 .val = v, \
3535 }
3636
37+ enum reg_fields {
38+ F_TUNE_USB2_PREEM ,
39+ F_TUNE_SQUELCH_U ,
40+ F_TUNE_IUSB2 ,
41+ F_NUM_TUNE_FIELDS ,
42+
43+ F_FORCE_VAL_5 = F_NUM_TUNE_FIELDS ,
44+ F_FORCE_EN_5 ,
45+
46+ F_EN_CTL1 ,
47+
48+ F_RPTR_STATUS ,
49+ F_NUM_FIELDS ,
50+ };
51+
52+ static struct reg_field eusb2_repeater_tune_reg_fields [F_NUM_FIELDS ] = {
53+ [F_TUNE_USB2_PREEM ] = REG_FIELD (EUSB2_TUNE_USB2_PREEM , 0 , 2 ),
54+ [F_TUNE_SQUELCH_U ] = REG_FIELD (EUSB2_TUNE_SQUELCH_U , 0 , 2 ),
55+ [F_TUNE_IUSB2 ] = REG_FIELD (EUSB2_TUNE_IUSB2 , 0 , 3 ),
56+
57+ [F_FORCE_VAL_5 ] = REG_FIELD (EUSB2_FORCE_VAL_5 , 0 , 7 ),
58+ [F_FORCE_EN_5 ] = REG_FIELD (EUSB2_FORCE_EN_5 , 0 , 7 ),
59+
60+ [F_EN_CTL1 ] = REG_FIELD (EUSB2_EN_CTL1 , 0 , 7 ),
61+
62+ [F_RPTR_STATUS ] = REG_FIELD (EUSB2_RPTR_STATUS , 0 , 7 ),
63+ };
64+
3765struct eusb2_repeater_init_tbl {
38- unsigned int offset ;
66+ unsigned int reg ;
3967 unsigned int val ;
4068};
4169
@@ -48,11 +76,10 @@ struct eusb2_repeater_cfg {
4876
4977struct eusb2_repeater {
5078 struct device * dev ;
51- struct regmap * regmap ;
79+ struct regmap_field * regs [ F_NUM_FIELDS ] ;
5280 struct phy * phy ;
5381 struct regulator_bulk_data * vregs ;
5482 const struct eusb2_repeater_cfg * cfg ;
55- u16 base ;
5683 enum phy_mode mode ;
5784};
5885
@@ -61,9 +88,9 @@ static const char * const pm8550b_vreg_l[] = {
6188};
6289
6390static const struct eusb2_repeater_init_tbl pm8550b_init_tbl [] = {
64- QCOM_EUSB2_REPEATER_INIT_CFG (EUSB2_TUNE_IUSB2 , 0x8 ),
65- QCOM_EUSB2_REPEATER_INIT_CFG (EUSB2_TUNE_SQUELCH_U , 0x3 ),
66- QCOM_EUSB2_REPEATER_INIT_CFG (EUSB2_TUNE_USB2_PREEM , 0x5 ),
91+ QCOM_EUSB2_REPEATER_INIT_CFG (F_TUNE_IUSB2 , 0x8 ),
92+ QCOM_EUSB2_REPEATER_INIT_CFG (F_TUNE_SQUELCH_U , 0x3 ),
93+ QCOM_EUSB2_REPEATER_INIT_CFG (F_TUNE_USB2_PREEM , 0x5 ),
6794};
6895
6996static const struct eusb2_repeater_cfg pm8550b_eusb2_cfg = {
@@ -93,7 +120,6 @@ static int eusb2_repeater_init(struct phy *phy)
93120{
94121 struct eusb2_repeater * rptr = phy_get_drvdata (phy );
95122 const struct eusb2_repeater_init_tbl * init_tbl = rptr -> cfg -> init_tbl ;
96- int num = rptr -> cfg -> init_tbl_num ;
97123 u32 val ;
98124 int ret ;
99125 int i ;
@@ -102,17 +128,14 @@ static int eusb2_repeater_init(struct phy *phy)
102128 if (ret )
103129 return ret ;
104130
105- regmap_update_bits (rptr -> regmap , rptr -> base + EUSB2_EN_CTL1 ,
106- EUSB2_RPTR_EN , EUSB2_RPTR_EN );
131+ regmap_field_update_bits (rptr -> regs [F_EN_CTL1 ], EUSB2_RPTR_EN , EUSB2_RPTR_EN );
107132
108- for (i = 0 ; i < num ; i ++ )
109- regmap_update_bits (rptr -> regmap ,
110- rptr -> base + init_tbl [i ].offset ,
111- init_tbl [i ].val , init_tbl [i ].val );
133+ for (i = 0 ; i < rptr -> cfg -> init_tbl_num ; i ++ )
134+ regmap_field_update_bits (rptr -> regs [init_tbl [i ].reg ],
135+ init_tbl [i ].val , init_tbl [i ].val );
112136
113- ret = regmap_read_poll_timeout (rptr -> regmap ,
114- rptr -> base + EUSB2_RPTR_STATUS , val ,
115- val & RPTR_OK , 10 , 5 );
137+ ret = regmap_field_read_poll_timeout (rptr -> regs [F_RPTR_STATUS ],
138+ val , val & RPTR_OK , 10 , 5 );
116139 if (ret )
117140 dev_err (rptr -> dev , "initialization timed-out\n" );
118141
@@ -131,10 +154,10 @@ static int eusb2_repeater_set_mode(struct phy *phy,
131154 * per eUSB 1.2 Spec. Below implement software workaround until
132155 * PHY and controller is fixing seen observation.
133156 */
134- regmap_update_bits (rptr -> regmap , rptr -> base + EUSB2_FORCE_EN_5 ,
135- F_CLK_19P2M_EN , F_CLK_19P2M_EN );
136- regmap_update_bits (rptr -> regmap , rptr -> base + EUSB2_FORCE_VAL_5 ,
137- V_CLK_19P2M_EN , V_CLK_19P2M_EN );
157+ regmap_field_update_bits (rptr -> regs [ F_FORCE_EN_5 ] ,
158+ F_CLK_19P2M_EN , F_CLK_19P2M_EN );
159+ regmap_field_update_bits (rptr -> regs [ F_FORCE_VAL_5 ] ,
160+ V_CLK_19P2M_EN , V_CLK_19P2M_EN );
138161 break ;
139162 case PHY_MODE_USB_DEVICE :
140163 /*
@@ -143,10 +166,10 @@ static int eusb2_repeater_set_mode(struct phy *phy,
143166 * repeater doesn't clear previous value due to shared
144167 * regulators (say host <-> device mode switch).
145168 */
146- regmap_update_bits (rptr -> regmap , rptr -> base + EUSB2_FORCE_EN_5 ,
147- F_CLK_19P2M_EN , 0 );
148- regmap_update_bits (rptr -> regmap , rptr -> base + EUSB2_FORCE_VAL_5 ,
149- V_CLK_19P2M_EN , 0 );
169+ regmap_field_update_bits (rptr -> regs [ F_FORCE_EN_5 ] ,
170+ F_CLK_19P2M_EN , 0 );
171+ regmap_field_update_bits (rptr -> regs [ F_FORCE_VAL_5 ] ,
172+ V_CLK_19P2M_EN , 0 );
150173 break ;
151174 default :
152175 return - EINVAL ;
@@ -175,8 +198,9 @@ static int eusb2_repeater_probe(struct platform_device *pdev)
175198 struct device * dev = & pdev -> dev ;
176199 struct phy_provider * phy_provider ;
177200 struct device_node * np = dev -> of_node ;
201+ struct regmap * regmap ;
202+ int i , ret ;
178203 u32 res ;
179- int ret ;
180204
181205 rptr = devm_kzalloc (dev , sizeof (* rptr ), GFP_KERNEL );
182206 if (!rptr )
@@ -189,15 +213,22 @@ static int eusb2_repeater_probe(struct platform_device *pdev)
189213 if (!rptr -> cfg )
190214 return - EINVAL ;
191215
192- rptr -> regmap = dev_get_regmap (dev -> parent , NULL );
193- if (!rptr -> regmap )
216+ regmap = dev_get_regmap (dev -> parent , NULL );
217+ if (!regmap )
194218 return - ENODEV ;
195219
196220 ret = of_property_read_u32 (np , "reg" , & res );
197221 if (ret < 0 )
198222 return ret ;
199223
200- rptr -> base = res ;
224+ for (i = 0 ; i < F_NUM_FIELDS ; i ++ )
225+ eusb2_repeater_tune_reg_fields [i ].reg += res ;
226+
227+ ret = devm_regmap_field_bulk_alloc (dev , regmap , rptr -> regs ,
228+ eusb2_repeater_tune_reg_fields ,
229+ F_NUM_FIELDS );
230+ if (ret )
231+ return ret ;
201232
202233 ret = eusb2_repeater_init_vregs (rptr );
203234 if (ret < 0 ) {
0 commit comments