Skip to content

Commit 89d7153

Browse files
Sandeep Maheswaramkishon
authored andcommitted
phy: qcom-qusb2: Add new overriding tuning parameters in QUSB2 V2 PHY
Added support for overriding bias-ctrl-value,charge-ctrl-value and hsdisc-trim-value params for QUSB2 V2 PHY Signed-off-by: Sandeep Maheswaram <[email protected]> Signed-off-by: Kishon Vijay Abraham I <[email protected]>
1 parent 449aede commit 89d7153

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

drivers/phy/qualcomm/phy-qcom-qusb2.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,25 @@
6666
#define IMP_RES_OFFSET_MASK GENMASK(5, 0)
6767
#define IMP_RES_OFFSET_SHIFT 0x0
6868

69+
/* QUSB2PHY_PLL_BIAS_CONTROL_2 register bits */
70+
#define BIAS_CTRL2_RES_OFFSET_MASK GENMASK(5, 0)
71+
#define BIAS_CTRL2_RES_OFFSET_SHIFT 0x0
72+
73+
/* QUSB2PHY_CHG_CONTROL_2 register bits */
74+
#define CHG_CTRL2_OFFSET_MASK GENMASK(5, 4)
75+
#define CHG_CTRL2_OFFSET_SHIFT 0x4
76+
6977
/* QUSB2PHY_PORT_TUNE1 register bits */
7078
#define HSTX_TRIM_MASK GENMASK(7, 4)
7179
#define HSTX_TRIM_SHIFT 0x4
7280
#define PREEMPH_WIDTH_HALF_BIT BIT(2)
7381
#define PREEMPHASIS_EN_MASK GENMASK(1, 0)
7482
#define PREEMPHASIS_EN_SHIFT 0x0
7583

84+
/* QUSB2PHY_PORT_TUNE2 register bits */
85+
#define HSDISC_TRIM_MASK GENMASK(1, 0)
86+
#define HSDISC_TRIM_SHIFT 0x0
87+
7688
#define QUSB2PHY_PLL_ANALOG_CONTROLS_TWO 0x04
7789
#define QUSB2PHY_PLL_CLOCK_INVERTERS 0x18c
7890
#define QUSB2PHY_PLL_CMODE 0x2c
@@ -291,12 +303,18 @@ struct override_param {
291303
* @hstx_trim: HSTX_TRIM to be updated in TUNE1 register
292304
* @preemphasis: Amplitude Pre-Emphasis to be updated in TUNE1 register
293305
* @preemphasis_width: half/full-width Pre-Emphasis updated via TUNE1
306+
* @bias_ctrl: bias ctrl to be updated in BIAS_CONTROL_2 register
307+
* @charge_ctrl: charge ctrl to be updated in CHG_CTRL2 register
308+
* @hsdisc_trim: disconnect threshold to be updated in TUNE2 register
294309
*/
295310
struct override_params {
296311
struct override_param imp_res_offset;
297312
struct override_param hstx_trim;
298313
struct override_param preemphasis;
299314
struct override_param preemphasis_width;
315+
struct override_param bias_ctrl;
316+
struct override_param charge_ctrl;
317+
struct override_param hsdisc_trim;
300318
};
301319

302320
/**
@@ -409,6 +427,16 @@ static void qusb2_phy_override_phy_params(struct qusb2_phy *qphy)
409427
or->imp_res_offset.value << IMP_RES_OFFSET_SHIFT,
410428
IMP_RES_OFFSET_MASK);
411429

430+
if (or->bias_ctrl.override)
431+
qusb2_write_mask(qphy->base, QUSB2PHY_PLL_BIAS_CONTROL_2,
432+
or->bias_ctrl.value << BIAS_CTRL2_RES_OFFSET_SHIFT,
433+
BIAS_CTRL2_RES_OFFSET_MASK);
434+
435+
if (or->charge_ctrl.override)
436+
qusb2_write_mask(qphy->base, QUSB2PHY_CHG_CTRL2,
437+
or->charge_ctrl.value << CHG_CTRL2_OFFSET_SHIFT,
438+
CHG_CTRL2_OFFSET_MASK);
439+
412440
if (or->hstx_trim.override)
413441
qusb2_write_mask(qphy->base, cfg->regs[QUSB2PHY_PORT_TUNE1],
414442
or->hstx_trim.value << HSTX_TRIM_SHIFT,
@@ -430,6 +458,11 @@ static void qusb2_phy_override_phy_params(struct qusb2_phy *qphy)
430458
cfg->regs[QUSB2PHY_PORT_TUNE1],
431459
PREEMPH_WIDTH_HALF_BIT);
432460
}
461+
462+
if (or->hsdisc_trim.override)
463+
qusb2_write_mask(qphy->base, cfg->regs[QUSB2PHY_PORT_TUNE2],
464+
or->hsdisc_trim.value << HSDISC_TRIM_SHIFT,
465+
HSDISC_TRIM_MASK);
433466
}
434467

435468
/*
@@ -879,6 +912,18 @@ static int qusb2_phy_probe(struct platform_device *pdev)
879912
or->imp_res_offset.override = true;
880913
}
881914

915+
if (!of_property_read_u32(dev->of_node, "qcom,bias-ctrl-value",
916+
&value)) {
917+
or->bias_ctrl.value = (u8)value;
918+
or->bias_ctrl.override = true;
919+
}
920+
921+
if (!of_property_read_u32(dev->of_node, "qcom,charge-ctrl-value",
922+
&value)) {
923+
or->charge_ctrl.value = (u8)value;
924+
or->charge_ctrl.override = true;
925+
}
926+
882927
if (!of_property_read_u32(dev->of_node, "qcom,hstx-trim-value",
883928
&value)) {
884929
or->hstx_trim.value = (u8)value;
@@ -897,6 +942,12 @@ static int qusb2_phy_probe(struct platform_device *pdev)
897942
or->preemphasis_width.override = true;
898943
}
899944

945+
if (!of_property_read_u32(dev->of_node, "qcom,hsdisc-trim-value",
946+
&value)) {
947+
or->hsdisc_trim.value = (u8)value;
948+
or->hsdisc_trim.override = true;
949+
}
950+
900951
pm_runtime_set_active(dev);
901952
pm_runtime_enable(dev);
902953
/*

0 commit comments

Comments
 (0)