@@ -277,6 +277,28 @@ static const char * const qusb2_phy_vreg_names[] = {
277
277
278
278
#define QUSB2_NUM_VREGS ARRAY_SIZE(qusb2_phy_vreg_names)
279
279
280
+ /* struct override_param - structure holding qusb2 v2 phy overriding param
281
+ * set override true if the device tree property exists and read and assign
282
+ * to value
283
+ */
284
+ struct override_param {
285
+ bool override ;
286
+ u8 value ;
287
+ };
288
+
289
+ /*struct override_params - structure holding qusb2 v2 phy overriding params
290
+ * @imp_res_offset: rescode offset to be updated in IMP_CTRL1 register
291
+ * @hstx_trim: HSTX_TRIM to be updated in TUNE1 register
292
+ * @preemphasis: Amplitude Pre-Emphasis to be updated in TUNE1 register
293
+ * @preemphasis_width: half/full-width Pre-Emphasis updated via TUNE1
294
+ */
295
+ struct override_params {
296
+ struct override_param imp_res_offset ;
297
+ struct override_param hstx_trim ;
298
+ struct override_param preemphasis ;
299
+ struct override_param preemphasis_width ;
300
+ };
301
+
280
302
/**
281
303
* struct qusb2_phy - structure holding qusb2 phy attributes
282
304
*
@@ -292,14 +314,7 @@ static const char * const qusb2_phy_vreg_names[] = {
292
314
* @tcsr: TCSR syscon register map
293
315
* @cell: nvmem cell containing phy tuning value
294
316
*
295
- * @override_imp_res_offset: PHY should use different rescode offset
296
- * @imp_res_offset_value: rescode offset to be updated in IMP_CTRL1 register
297
- * @override_hstx_trim: PHY should use different HSTX o/p current value
298
- * @hstx_trim_value: HSTX_TRIM value to be updated in TUNE1 register
299
- * @override_preemphasis: PHY should use different pre-amphasis amplitude
300
- * @preemphasis_level: Amplitude Pre-Emphasis to be updated in TUNE1 register
301
- * @override_preemphasis_width: PHY should use different pre-emphasis duration
302
- * @preemphasis_width: half/full-width Pre-Emphasis updated via TUNE1
317
+ * @overrides: pointer to structure for all overriding tuning params
303
318
*
304
319
* @cfg: phy config data
305
320
* @has_se_clk_scheme: indicate if PHY has single-ended ref clock scheme
@@ -319,14 +334,7 @@ struct qusb2_phy {
319
334
struct regmap * tcsr ;
320
335
struct nvmem_cell * cell ;
321
336
322
- bool override_imp_res_offset ;
323
- u8 imp_res_offset_value ;
324
- bool override_hstx_trim ;
325
- u8 hstx_trim_value ;
326
- bool override_preemphasis ;
327
- u8 preemphasis_level ;
328
- bool override_preemphasis_width ;
329
- u8 preemphasis_width ;
337
+ struct override_params overrides ;
330
338
331
339
const struct qusb2_phy_cfg * cfg ;
332
340
bool has_se_clk_scheme ;
@@ -394,24 +402,25 @@ void qcom_qusb2_phy_configure(void __iomem *base,
394
402
static void qusb2_phy_override_phy_params (struct qusb2_phy * qphy )
395
403
{
396
404
const struct qusb2_phy_cfg * cfg = qphy -> cfg ;
405
+ struct override_params * or = & qphy -> overrides ;
397
406
398
- if (qphy -> override_imp_res_offset )
407
+ if (or -> imp_res_offset . override )
399
408
qusb2_write_mask (qphy -> base , QUSB2PHY_IMP_CTRL1 ,
400
- qphy -> imp_res_offset_value << IMP_RES_OFFSET_SHIFT ,
409
+ or -> imp_res_offset . value << IMP_RES_OFFSET_SHIFT ,
401
410
IMP_RES_OFFSET_MASK );
402
411
403
- if (qphy -> override_hstx_trim )
412
+ if (or -> hstx_trim . override )
404
413
qusb2_write_mask (qphy -> base , cfg -> regs [QUSB2PHY_PORT_TUNE1 ],
405
- qphy -> hstx_trim_value << HSTX_TRIM_SHIFT ,
414
+ or -> hstx_trim . value << HSTX_TRIM_SHIFT ,
406
415
HSTX_TRIM_MASK );
407
416
408
- if (qphy -> override_preemphasis )
417
+ if (or -> preemphasis . override )
409
418
qusb2_write_mask (qphy -> base , cfg -> regs [QUSB2PHY_PORT_TUNE1 ],
410
- qphy -> preemphasis_level << PREEMPHASIS_EN_SHIFT ,
419
+ or -> preemphasis . value << PREEMPHASIS_EN_SHIFT ,
411
420
PREEMPHASIS_EN_MASK );
412
421
413
- if (qphy -> override_preemphasis_width ) {
414
- if (qphy -> preemphasis_width ==
422
+ if (or -> preemphasis_width . override ) {
423
+ if (or -> preemphasis_width . value ==
415
424
QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT )
416
425
qusb2_setbits (qphy -> base ,
417
426
cfg -> regs [QUSB2PHY_PORT_TUNE1 ],
@@ -796,10 +805,12 @@ static int qusb2_phy_probe(struct platform_device *pdev)
796
805
int ret , i ;
797
806
int num ;
798
807
u32 value ;
808
+ struct override_params * or ;
799
809
800
810
qphy = devm_kzalloc (dev , sizeof (* qphy ), GFP_KERNEL );
801
811
if (!qphy )
802
812
return - ENOMEM ;
813
+ or = & qphy -> overrides ;
803
814
804
815
res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
805
816
qphy -> base = devm_ioremap_resource (dev , res );
@@ -864,26 +875,26 @@ static int qusb2_phy_probe(struct platform_device *pdev)
864
875
865
876
if (!of_property_read_u32 (dev -> of_node , "qcom,imp-res-offset-value" ,
866
877
& value )) {
867
- qphy -> imp_res_offset_value = (u8 )value ;
868
- qphy -> override_imp_res_offset = true;
878
+ or -> imp_res_offset . value = (u8 )value ;
879
+ or -> imp_res_offset . override = true;
869
880
}
870
881
871
882
if (!of_property_read_u32 (dev -> of_node , "qcom,hstx-trim-value" ,
872
883
& value )) {
873
- qphy -> hstx_trim_value = (u8 )value ;
874
- qphy -> override_hstx_trim = true;
884
+ or -> hstx_trim . value = (u8 )value ;
885
+ or -> hstx_trim . override = true;
875
886
}
876
887
877
888
if (!of_property_read_u32 (dev -> of_node , "qcom,preemphasis-level" ,
878
889
& value )) {
879
- qphy -> preemphasis_level = (u8 )value ;
880
- qphy -> override_preemphasis = true;
890
+ or -> preemphasis . value = (u8 )value ;
891
+ or -> preemphasis . override = true;
881
892
}
882
893
883
894
if (!of_property_read_u32 (dev -> of_node , "qcom,preemphasis-width" ,
884
895
& value )) {
885
- qphy -> preemphasis_width = (u8 )value ;
886
- qphy -> override_preemphasis_width = true;
896
+ or -> preemphasis_width . value = (u8 )value ;
897
+ or -> preemphasis_width . override = true;
887
898
}
888
899
889
900
pm_runtime_set_active (dev );
0 commit comments