Skip to content

Commit 449aede

Browse files
Sandeep Maheswaramkishon
authored andcommitted
phy: qcom-qusb2: Add support for overriding tuning parameters in QUSB2 V2 PHY
Added new structure for overriding tuning parameters in QUSB2 V2 PHY as the override params are increased due to usage of generic QUSB2 V2 phy table. Signed-off-by: Sandeep Maheswaram <[email protected]> Signed-off-by: Kishon Vijay Abraham I <[email protected]>
1 parent 1e6f134 commit 449aede

File tree

1 file changed

+43
-32
lines changed

1 file changed

+43
-32
lines changed

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

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,28 @@ static const char * const qusb2_phy_vreg_names[] = {
277277

278278
#define QUSB2_NUM_VREGS ARRAY_SIZE(qusb2_phy_vreg_names)
279279

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+
280302
/**
281303
* struct qusb2_phy - structure holding qusb2 phy attributes
282304
*
@@ -292,14 +314,7 @@ static const char * const qusb2_phy_vreg_names[] = {
292314
* @tcsr: TCSR syscon register map
293315
* @cell: nvmem cell containing phy tuning value
294316
*
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
303318
*
304319
* @cfg: phy config data
305320
* @has_se_clk_scheme: indicate if PHY has single-ended ref clock scheme
@@ -319,14 +334,7 @@ struct qusb2_phy {
319334
struct regmap *tcsr;
320335
struct nvmem_cell *cell;
321336

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;
330338

331339
const struct qusb2_phy_cfg *cfg;
332340
bool has_se_clk_scheme;
@@ -394,24 +402,25 @@ void qcom_qusb2_phy_configure(void __iomem *base,
394402
static void qusb2_phy_override_phy_params(struct qusb2_phy *qphy)
395403
{
396404
const struct qusb2_phy_cfg *cfg = qphy->cfg;
405+
struct override_params *or = &qphy->overrides;
397406

398-
if (qphy->override_imp_res_offset)
407+
if (or->imp_res_offset.override)
399408
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,
401410
IMP_RES_OFFSET_MASK);
402411

403-
if (qphy->override_hstx_trim)
412+
if (or->hstx_trim.override)
404413
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,
406415
HSTX_TRIM_MASK);
407416

408-
if (qphy->override_preemphasis)
417+
if (or->preemphasis.override)
409418
qusb2_write_mask(qphy->base, cfg->regs[QUSB2PHY_PORT_TUNE1],
410-
qphy->preemphasis_level << PREEMPHASIS_EN_SHIFT,
419+
or->preemphasis.value << PREEMPHASIS_EN_SHIFT,
411420
PREEMPHASIS_EN_MASK);
412421

413-
if (qphy->override_preemphasis_width) {
414-
if (qphy->preemphasis_width ==
422+
if (or->preemphasis_width.override) {
423+
if (or->preemphasis_width.value ==
415424
QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT)
416425
qusb2_setbits(qphy->base,
417426
cfg->regs[QUSB2PHY_PORT_TUNE1],
@@ -796,10 +805,12 @@ static int qusb2_phy_probe(struct platform_device *pdev)
796805
int ret, i;
797806
int num;
798807
u32 value;
808+
struct override_params *or;
799809

800810
qphy = devm_kzalloc(dev, sizeof(*qphy), GFP_KERNEL);
801811
if (!qphy)
802812
return -ENOMEM;
813+
or = &qphy->overrides;
803814

804815
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
805816
qphy->base = devm_ioremap_resource(dev, res);
@@ -864,26 +875,26 @@ static int qusb2_phy_probe(struct platform_device *pdev)
864875

865876
if (!of_property_read_u32(dev->of_node, "qcom,imp-res-offset-value",
866877
&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;
869880
}
870881

871882
if (!of_property_read_u32(dev->of_node, "qcom,hstx-trim-value",
872883
&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;
875886
}
876887

877888
if (!of_property_read_u32(dev->of_node, "qcom,preemphasis-level",
878889
&value)) {
879-
qphy->preemphasis_level = (u8)value;
880-
qphy->override_preemphasis = true;
890+
or->preemphasis.value = (u8)value;
891+
or->preemphasis.override = true;
881892
}
882893

883894
if (!of_property_read_u32(dev->of_node, "qcom,preemphasis-width",
884895
&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;
887898
}
888899

889900
pm_runtime_set_active(dev);

0 commit comments

Comments
 (0)