Skip to content

Commit 58c806d

Browse files
committed
Merge tag 'phy-fixes2-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy
Pull phy fixes from Vinod Koul: - qcom: m31 pointer err fix, eusb2 fix redundant zero-out loop and v3 offset fix on qmp-usb - freescale: fix for dphy alias * tag 'phy-fixes2-6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy: phy: qcom-qmp-usb: fix v3 offsets data phy: qualcomm: eusb2-repeater: Rework init to drop redundant zero-out loop phy: qcom: phy-qcom-m31: fix wrong pointer pass to PTR_ERR() phy: freescale: phy-fsl-imx8-mipi-dphy: Fix alias name to use dashes
2 parents d57dd2d + d4c08d8 commit 58c806d

File tree

4 files changed

+69
-111
lines changed

4 files changed

+69
-111
lines changed

drivers/phy/freescale/phy-fsl-imx8-mipi-dphy.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ static int mixel_dphy_probe(struct platform_device *pdev)
706706
return ret;
707707
}
708708

709-
priv->id = of_alias_get_id(np, "mipi_dphy");
709+
priv->id = of_alias_get_id(np, "mipi-dphy");
710710
if (priv->id < 0) {
711711
dev_err(dev, "Failed to get phy node alias id: %d\n",
712712
priv->id);

drivers/phy/qualcomm/phy-qcom-eusb2-repeater.c

Lines changed: 62 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -37,56 +37,28 @@
3737
#define EUSB2_TUNE_EUSB_EQU 0x5A
3838
#define EUSB2_TUNE_EUSB_HS_COMP_CUR 0x5B
3939

40-
#define QCOM_EUSB2_REPEATER_INIT_CFG(r, v) \
41-
{ \
42-
.reg = r, \
43-
.val = v, \
44-
}
45-
46-
enum reg_fields {
47-
F_TUNE_EUSB_HS_COMP_CUR,
48-
F_TUNE_EUSB_EQU,
49-
F_TUNE_EUSB_SLEW,
50-
F_TUNE_USB2_HS_COMP_CUR,
51-
F_TUNE_USB2_PREEM,
52-
F_TUNE_USB2_EQU,
53-
F_TUNE_USB2_SLEW,
54-
F_TUNE_SQUELCH_U,
55-
F_TUNE_HSDISC,
56-
F_TUNE_RES_FSDIF,
57-
F_TUNE_IUSB2,
58-
F_TUNE_USB2_CROSSOVER,
59-
F_NUM_TUNE_FIELDS,
60-
61-
F_FORCE_VAL_5 = F_NUM_TUNE_FIELDS,
62-
F_FORCE_EN_5,
63-
64-
F_EN_CTL1,
65-
66-
F_RPTR_STATUS,
67-
F_NUM_FIELDS,
68-
};
69-
70-
static struct reg_field eusb2_repeater_tune_reg_fields[F_NUM_FIELDS] = {
71-
[F_TUNE_EUSB_HS_COMP_CUR] = REG_FIELD(EUSB2_TUNE_EUSB_HS_COMP_CUR, 0, 1),
72-
[F_TUNE_EUSB_EQU] = REG_FIELD(EUSB2_TUNE_EUSB_EQU, 0, 1),
73-
[F_TUNE_EUSB_SLEW] = REG_FIELD(EUSB2_TUNE_EUSB_SLEW, 0, 1),
74-
[F_TUNE_USB2_HS_COMP_CUR] = REG_FIELD(EUSB2_TUNE_USB2_HS_COMP_CUR, 0, 1),
75-
[F_TUNE_USB2_PREEM] = REG_FIELD(EUSB2_TUNE_USB2_PREEM, 0, 2),
76-
[F_TUNE_USB2_EQU] = REG_FIELD(EUSB2_TUNE_USB2_EQU, 0, 1),
77-
[F_TUNE_USB2_SLEW] = REG_FIELD(EUSB2_TUNE_USB2_SLEW, 0, 1),
78-
[F_TUNE_SQUELCH_U] = REG_FIELD(EUSB2_TUNE_SQUELCH_U, 0, 2),
79-
[F_TUNE_HSDISC] = REG_FIELD(EUSB2_TUNE_HSDISC, 0, 2),
80-
[F_TUNE_RES_FSDIF] = REG_FIELD(EUSB2_TUNE_RES_FSDIF, 0, 2),
81-
[F_TUNE_IUSB2] = REG_FIELD(EUSB2_TUNE_IUSB2, 0, 3),
82-
[F_TUNE_USB2_CROSSOVER] = REG_FIELD(EUSB2_TUNE_USB2_CROSSOVER, 0, 2),
83-
84-
[F_FORCE_VAL_5] = REG_FIELD(EUSB2_FORCE_VAL_5, 0, 7),
85-
[F_FORCE_EN_5] = REG_FIELD(EUSB2_FORCE_EN_5, 0, 7),
86-
87-
[F_EN_CTL1] = REG_FIELD(EUSB2_EN_CTL1, 0, 7),
88-
89-
[F_RPTR_STATUS] = REG_FIELD(EUSB2_RPTR_STATUS, 0, 7),
40+
enum eusb2_reg_layout {
41+
TUNE_EUSB_HS_COMP_CUR,
42+
TUNE_EUSB_EQU,
43+
TUNE_EUSB_SLEW,
44+
TUNE_USB2_HS_COMP_CUR,
45+
TUNE_USB2_PREEM,
46+
TUNE_USB2_EQU,
47+
TUNE_USB2_SLEW,
48+
TUNE_SQUELCH_U,
49+
TUNE_HSDISC,
50+
TUNE_RES_FSDIF,
51+
TUNE_IUSB2,
52+
TUNE_USB2_CROSSOVER,
53+
NUM_TUNE_FIELDS,
54+
55+
FORCE_VAL_5 = NUM_TUNE_FIELDS,
56+
FORCE_EN_5,
57+
58+
EN_CTL1,
59+
60+
RPTR_STATUS,
61+
LAYOUT_SIZE,
9062
};
9163

9264
struct eusb2_repeater_cfg {
@@ -98,21 +70,22 @@ struct eusb2_repeater_cfg {
9870

9971
struct eusb2_repeater {
10072
struct device *dev;
101-
struct regmap_field *regs[F_NUM_FIELDS];
73+
struct regmap *regmap;
10274
struct phy *phy;
10375
struct regulator_bulk_data *vregs;
10476
const struct eusb2_repeater_cfg *cfg;
77+
u32 base;
10578
enum phy_mode mode;
10679
};
10780

10881
static const char * const pm8550b_vreg_l[] = {
10982
"vdd18", "vdd3",
11083
};
11184

112-
static const u32 pm8550b_init_tbl[F_NUM_TUNE_FIELDS] = {
113-
[F_TUNE_IUSB2] = 0x8,
114-
[F_TUNE_SQUELCH_U] = 0x3,
115-
[F_TUNE_USB2_PREEM] = 0x5,
85+
static const u32 pm8550b_init_tbl[NUM_TUNE_FIELDS] = {
86+
[TUNE_IUSB2] = 0x8,
87+
[TUNE_SQUELCH_U] = 0x3,
88+
[TUNE_USB2_PREEM] = 0x5,
11689
};
11790

11891
static const struct eusb2_repeater_cfg pm8550b_eusb2_cfg = {
@@ -140,47 +113,42 @@ static int eusb2_repeater_init_vregs(struct eusb2_repeater *rptr)
140113

141114
static int eusb2_repeater_init(struct phy *phy)
142115
{
143-
struct reg_field *regfields = eusb2_repeater_tune_reg_fields;
144116
struct eusb2_repeater *rptr = phy_get_drvdata(phy);
145117
struct device_node *np = rptr->dev->of_node;
146-
u32 init_tbl[F_NUM_TUNE_FIELDS] = { 0 };
147-
u8 override;
118+
struct regmap *regmap = rptr->regmap;
119+
const u32 *init_tbl = rptr->cfg->init_tbl;
120+
u8 tune_usb2_preem = init_tbl[TUNE_USB2_PREEM];
121+
u8 tune_hsdisc = init_tbl[TUNE_HSDISC];
122+
u8 tune_iusb2 = init_tbl[TUNE_IUSB2];
123+
u32 base = rptr->base;
148124
u32 val;
149125
int ret;
150-
int i;
126+
127+
of_property_read_u8(np, "qcom,tune-usb2-amplitude", &tune_iusb2);
128+
of_property_read_u8(np, "qcom,tune-usb2-disc-thres", &tune_hsdisc);
129+
of_property_read_u8(np, "qcom,tune-usb2-preem", &tune_usb2_preem);
151130

152131
ret = regulator_bulk_enable(rptr->cfg->num_vregs, rptr->vregs);
153132
if (ret)
154133
return ret;
155134

156-
regmap_field_update_bits(rptr->regs[F_EN_CTL1], EUSB2_RPTR_EN, EUSB2_RPTR_EN);
135+
regmap_write(regmap, base + EUSB2_EN_CTL1, EUSB2_RPTR_EN);
157136

158-
for (i = 0; i < F_NUM_TUNE_FIELDS; i++) {
159-
if (init_tbl[i]) {
160-
regmap_field_update_bits(rptr->regs[i], init_tbl[i], init_tbl[i]);
161-
} else {
162-
/* Write 0 if there's no value set */
163-
u32 mask = GENMASK(regfields[i].msb, regfields[i].lsb);
164-
165-
regmap_field_update_bits(rptr->regs[i], mask, 0);
166-
}
167-
}
168-
memcpy(init_tbl, rptr->cfg->init_tbl, sizeof(init_tbl));
137+
regmap_write(regmap, base + EUSB2_TUNE_EUSB_HS_COMP_CUR, init_tbl[TUNE_EUSB_HS_COMP_CUR]);
138+
regmap_write(regmap, base + EUSB2_TUNE_EUSB_EQU, init_tbl[TUNE_EUSB_EQU]);
139+
regmap_write(regmap, base + EUSB2_TUNE_EUSB_SLEW, init_tbl[TUNE_EUSB_SLEW]);
140+
regmap_write(regmap, base + EUSB2_TUNE_USB2_HS_COMP_CUR, init_tbl[TUNE_USB2_HS_COMP_CUR]);
141+
regmap_write(regmap, base + EUSB2_TUNE_USB2_EQU, init_tbl[TUNE_USB2_EQU]);
142+
regmap_write(regmap, base + EUSB2_TUNE_USB2_SLEW, init_tbl[TUNE_USB2_SLEW]);
143+
regmap_write(regmap, base + EUSB2_TUNE_SQUELCH_U, init_tbl[TUNE_SQUELCH_U]);
144+
regmap_write(regmap, base + EUSB2_TUNE_RES_FSDIF, init_tbl[TUNE_RES_FSDIF]);
145+
regmap_write(regmap, base + EUSB2_TUNE_USB2_CROSSOVER, init_tbl[TUNE_USB2_CROSSOVER]);
169146

170-
if (!of_property_read_u8(np, "qcom,tune-usb2-amplitude", &override))
171-
init_tbl[F_TUNE_IUSB2] = override;
147+
regmap_write(regmap, base + EUSB2_TUNE_USB2_PREEM, tune_usb2_preem);
148+
regmap_write(regmap, base + EUSB2_TUNE_HSDISC, tune_hsdisc);
149+
regmap_write(regmap, base + EUSB2_TUNE_IUSB2, tune_iusb2);
172150

173-
if (!of_property_read_u8(np, "qcom,tune-usb2-disc-thres", &override))
174-
init_tbl[F_TUNE_HSDISC] = override;
175-
176-
if (!of_property_read_u8(np, "qcom,tune-usb2-preem", &override))
177-
init_tbl[F_TUNE_USB2_PREEM] = override;
178-
179-
for (i = 0; i < F_NUM_TUNE_FIELDS; i++)
180-
regmap_field_update_bits(rptr->regs[i], init_tbl[i], init_tbl[i]);
181-
182-
ret = regmap_field_read_poll_timeout(rptr->regs[F_RPTR_STATUS],
183-
val, val & RPTR_OK, 10, 5);
151+
ret = regmap_read_poll_timeout(regmap, base + EUSB2_RPTR_STATUS, val, val & RPTR_OK, 10, 5);
184152
if (ret)
185153
dev_err(rptr->dev, "initialization timed-out\n");
186154

@@ -191,6 +159,8 @@ static int eusb2_repeater_set_mode(struct phy *phy,
191159
enum phy_mode mode, int submode)
192160
{
193161
struct eusb2_repeater *rptr = phy_get_drvdata(phy);
162+
struct regmap *regmap = rptr->regmap;
163+
u32 base = rptr->base;
194164

195165
switch (mode) {
196166
case PHY_MODE_USB_HOST:
@@ -199,10 +169,8 @@ static int eusb2_repeater_set_mode(struct phy *phy,
199169
* per eUSB 1.2 Spec. Below implement software workaround until
200170
* PHY and controller is fixing seen observation.
201171
*/
202-
regmap_field_update_bits(rptr->regs[F_FORCE_EN_5],
203-
F_CLK_19P2M_EN, F_CLK_19P2M_EN);
204-
regmap_field_update_bits(rptr->regs[F_FORCE_VAL_5],
205-
V_CLK_19P2M_EN, V_CLK_19P2M_EN);
172+
regmap_write(regmap, base + EUSB2_FORCE_EN_5, F_CLK_19P2M_EN);
173+
regmap_write(regmap, base + EUSB2_FORCE_VAL_5, V_CLK_19P2M_EN);
206174
break;
207175
case PHY_MODE_USB_DEVICE:
208176
/*
@@ -211,10 +179,8 @@ static int eusb2_repeater_set_mode(struct phy *phy,
211179
* repeater doesn't clear previous value due to shared
212180
* regulators (say host <-> device mode switch).
213181
*/
214-
regmap_field_update_bits(rptr->regs[F_FORCE_EN_5],
215-
F_CLK_19P2M_EN, 0);
216-
regmap_field_update_bits(rptr->regs[F_FORCE_VAL_5],
217-
V_CLK_19P2M_EN, 0);
182+
regmap_write(regmap, base + EUSB2_FORCE_EN_5, 0);
183+
regmap_write(regmap, base + EUSB2_FORCE_VAL_5, 0);
218184
break;
219185
default:
220186
return -EINVAL;
@@ -243,9 +209,8 @@ static int eusb2_repeater_probe(struct platform_device *pdev)
243209
struct device *dev = &pdev->dev;
244210
struct phy_provider *phy_provider;
245211
struct device_node *np = dev->of_node;
246-
struct regmap *regmap;
247-
int i, ret;
248212
u32 res;
213+
int ret;
249214

250215
rptr = devm_kzalloc(dev, sizeof(*rptr), GFP_KERNEL);
251216
if (!rptr)
@@ -258,22 +223,15 @@ static int eusb2_repeater_probe(struct platform_device *pdev)
258223
if (!rptr->cfg)
259224
return -EINVAL;
260225

261-
regmap = dev_get_regmap(dev->parent, NULL);
262-
if (!regmap)
226+
rptr->regmap = dev_get_regmap(dev->parent, NULL);
227+
if (!rptr->regmap)
263228
return -ENODEV;
264229

265230
ret = of_property_read_u32(np, "reg", &res);
266231
if (ret < 0)
267232
return ret;
268233

269-
for (i = 0; i < F_NUM_FIELDS; i++)
270-
eusb2_repeater_tune_reg_fields[i].reg += res;
271-
272-
ret = devm_regmap_field_bulk_alloc(dev, regmap, rptr->regs,
273-
eusb2_repeater_tune_reg_fields,
274-
F_NUM_FIELDS);
275-
if (ret)
276-
return ret;
234+
rptr->base = res;
277235

278236
ret = eusb2_repeater_init_vregs(rptr);
279237
if (ret < 0) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ static int m31usb_phy_probe(struct platform_device *pdev)
299299

300300
qphy->vreg = devm_regulator_get(dev, "vdda-phy");
301301
if (IS_ERR(qphy->vreg))
302-
return dev_err_probe(dev, PTR_ERR(qphy->phy),
302+
return dev_err_probe(dev, PTR_ERR(qphy->vreg),
303303
"failed to get vreg\n");
304304

305305
phy_set_drvdata(qphy->phy, qphy);

drivers/phy/qualcomm/phy-qcom-qmp-usb.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1556,7 +1556,7 @@ static const char * const qmp_phy_vreg_l[] = {
15561556
"vdda-phy", "vdda-pll",
15571557
};
15581558

1559-
static const struct qmp_usb_offsets qmp_usb_offsets_ipq8074 = {
1559+
static const struct qmp_usb_offsets qmp_usb_offsets_v3 = {
15601560
.serdes = 0,
15611561
.pcs = 0x800,
15621562
.pcs_misc = 0x600,
@@ -1572,7 +1572,7 @@ static const struct qmp_usb_offsets qmp_usb_offsets_ipq9574 = {
15721572
.rx = 0x400,
15731573
};
15741574

1575-
static const struct qmp_usb_offsets qmp_usb_offsets_v3 = {
1575+
static const struct qmp_usb_offsets qmp_usb_offsets_v3_msm8996 = {
15761576
.serdes = 0,
15771577
.pcs = 0x600,
15781578
.tx = 0x200,
@@ -1624,7 +1624,7 @@ static const struct qmp_usb_offsets qmp_usb_offsets_v7 = {
16241624
static const struct qmp_phy_cfg ipq6018_usb3phy_cfg = {
16251625
.lanes = 1,
16261626

1627-
.offsets = &qmp_usb_offsets_ipq8074,
1627+
.offsets = &qmp_usb_offsets_v3,
16281628

16291629
.serdes_tbl = ipq9574_usb3_serdes_tbl,
16301630
.serdes_tbl_num = ARRAY_SIZE(ipq9574_usb3_serdes_tbl),
@@ -1642,7 +1642,7 @@ static const struct qmp_phy_cfg ipq6018_usb3phy_cfg = {
16421642
static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = {
16431643
.lanes = 1,
16441644

1645-
.offsets = &qmp_usb_offsets_ipq8074,
1645+
.offsets = &qmp_usb_offsets_v3,
16461646

16471647
.serdes_tbl = ipq8074_usb3_serdes_tbl,
16481648
.serdes_tbl_num = ARRAY_SIZE(ipq8074_usb3_serdes_tbl),
@@ -1678,7 +1678,7 @@ static const struct qmp_phy_cfg ipq9574_usb3phy_cfg = {
16781678
static const struct qmp_phy_cfg msm8996_usb3phy_cfg = {
16791679
.lanes = 1,
16801680

1681-
.offsets = &qmp_usb_offsets_v3,
1681+
.offsets = &qmp_usb_offsets_v3_msm8996,
16821682

16831683
.serdes_tbl = msm8996_usb3_serdes_tbl,
16841684
.serdes_tbl_num = ARRAY_SIZE(msm8996_usb3_serdes_tbl),

0 commit comments

Comments
 (0)