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

Changed files
+66 -108
drivers
+1 -1
drivers/phy/freescale/phy-fsl-imx8-mipi-dphy.c
··· 706 706 return ret; 707 707 } 708 708 709 - priv->id = of_alias_get_id(np, "mipi_dphy"); 709 + priv->id = of_alias_get_id(np, "mipi-dphy"); 710 710 if (priv->id < 0) { 711 711 dev_err(dev, "Failed to get phy node alias id: %d\n", 712 712 priv->id);
+59 -101
drivers/phy/qualcomm/phy-qcom-eusb2-repeater.c
··· 37 37 #define EUSB2_TUNE_EUSB_EQU 0x5A 38 38 #define EUSB2_TUNE_EUSB_HS_COMP_CUR 0x5B 39 39 40 - #define QCOM_EUSB2_REPEATER_INIT_CFG(r, v) \ 41 - { \ 42 - .reg = r, \ 43 - .val = v, \ 44 - } 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, 45 54 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, 55 + FORCE_VAL_5 = NUM_TUNE_FIELDS, 56 + FORCE_EN_5, 60 57 61 - F_FORCE_VAL_5 = F_NUM_TUNE_FIELDS, 62 - F_FORCE_EN_5, 58 + EN_CTL1, 63 59 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), 60 + RPTR_STATUS, 61 + LAYOUT_SIZE, 90 62 }; 91 63 92 64 struct eusb2_repeater_cfg { ··· 70 98 71 99 struct eusb2_repeater { 72 100 struct device *dev; 73 - struct regmap_field *regs[F_NUM_FIELDS]; 101 + struct regmap *regmap; 74 102 struct phy *phy; 75 103 struct regulator_bulk_data *vregs; 76 104 const struct eusb2_repeater_cfg *cfg; 105 + u32 base; 77 106 enum phy_mode mode; 78 107 }; 79 108 ··· 82 109 "vdd18", "vdd3", 83 110 }; 84 111 85 - static const u32 pm8550b_init_tbl[F_NUM_TUNE_FIELDS] = { 86 - [F_TUNE_IUSB2] = 0x8, 87 - [F_TUNE_SQUELCH_U] = 0x3, 88 - [F_TUNE_USB2_PREEM] = 0x5, 112 + static const u32 pm8550b_init_tbl[NUM_TUNE_FIELDS] = { 113 + [TUNE_IUSB2] = 0x8, 114 + [TUNE_SQUELCH_U] = 0x3, 115 + [TUNE_USB2_PREEM] = 0x5, 89 116 }; 90 117 91 118 static const struct eusb2_repeater_cfg pm8550b_eusb2_cfg = { ··· 113 140 114 141 static int eusb2_repeater_init(struct phy *phy) 115 142 { 116 - struct reg_field *regfields = eusb2_repeater_tune_reg_fields; 117 143 struct eusb2_repeater *rptr = phy_get_drvdata(phy); 118 144 struct device_node *np = rptr->dev->of_node; 119 - u32 init_tbl[F_NUM_TUNE_FIELDS] = { 0 }; 120 - u8 override; 145 + struct regmap *regmap = rptr->regmap; 146 + const u32 *init_tbl = rptr->cfg->init_tbl; 147 + u8 tune_usb2_preem = init_tbl[TUNE_USB2_PREEM]; 148 + u8 tune_hsdisc = init_tbl[TUNE_HSDISC]; 149 + u8 tune_iusb2 = init_tbl[TUNE_IUSB2]; 150 + u32 base = rptr->base; 121 151 u32 val; 122 152 int ret; 123 - int i; 153 + 154 + of_property_read_u8(np, "qcom,tune-usb2-amplitude", &tune_iusb2); 155 + of_property_read_u8(np, "qcom,tune-usb2-disc-thres", &tune_hsdisc); 156 + of_property_read_u8(np, "qcom,tune-usb2-preem", &tune_usb2_preem); 124 157 125 158 ret = regulator_bulk_enable(rptr->cfg->num_vregs, rptr->vregs); 126 159 if (ret) 127 160 return ret; 128 161 129 - regmap_field_update_bits(rptr->regs[F_EN_CTL1], EUSB2_RPTR_EN, EUSB2_RPTR_EN); 162 + regmap_write(regmap, base + EUSB2_EN_CTL1, EUSB2_RPTR_EN); 130 163 131 - for (i = 0; i < F_NUM_TUNE_FIELDS; i++) { 132 - if (init_tbl[i]) { 133 - regmap_field_update_bits(rptr->regs[i], init_tbl[i], init_tbl[i]); 134 - } else { 135 - /* Write 0 if there's no value set */ 136 - u32 mask = GENMASK(regfields[i].msb, regfields[i].lsb); 164 + regmap_write(regmap, base + EUSB2_TUNE_EUSB_HS_COMP_CUR, init_tbl[TUNE_EUSB_HS_COMP_CUR]); 165 + regmap_write(regmap, base + EUSB2_TUNE_EUSB_EQU, init_tbl[TUNE_EUSB_EQU]); 166 + regmap_write(regmap, base + EUSB2_TUNE_EUSB_SLEW, init_tbl[TUNE_EUSB_SLEW]); 167 + regmap_write(regmap, base + EUSB2_TUNE_USB2_HS_COMP_CUR, init_tbl[TUNE_USB2_HS_COMP_CUR]); 168 + regmap_write(regmap, base + EUSB2_TUNE_USB2_EQU, init_tbl[TUNE_USB2_EQU]); 169 + regmap_write(regmap, base + EUSB2_TUNE_USB2_SLEW, init_tbl[TUNE_USB2_SLEW]); 170 + regmap_write(regmap, base + EUSB2_TUNE_SQUELCH_U, init_tbl[TUNE_SQUELCH_U]); 171 + regmap_write(regmap, base + EUSB2_TUNE_RES_FSDIF, init_tbl[TUNE_RES_FSDIF]); 172 + regmap_write(regmap, base + EUSB2_TUNE_USB2_CROSSOVER, init_tbl[TUNE_USB2_CROSSOVER]); 137 173 138 - regmap_field_update_bits(rptr->regs[i], mask, 0); 139 - } 140 - } 141 - memcpy(init_tbl, rptr->cfg->init_tbl, sizeof(init_tbl)); 174 + regmap_write(regmap, base + EUSB2_TUNE_USB2_PREEM, tune_usb2_preem); 175 + regmap_write(regmap, base + EUSB2_TUNE_HSDISC, tune_hsdisc); 176 + regmap_write(regmap, base + EUSB2_TUNE_IUSB2, tune_iusb2); 142 177 143 - if (!of_property_read_u8(np, "qcom,tune-usb2-amplitude", &override)) 144 - init_tbl[F_TUNE_IUSB2] = override; 145 - 146 - if (!of_property_read_u8(np, "qcom,tune-usb2-disc-thres", &override)) 147 - init_tbl[F_TUNE_HSDISC] = override; 148 - 149 - if (!of_property_read_u8(np, "qcom,tune-usb2-preem", &override)) 150 - init_tbl[F_TUNE_USB2_PREEM] = override; 151 - 152 - for (i = 0; i < F_NUM_TUNE_FIELDS; i++) 153 - regmap_field_update_bits(rptr->regs[i], init_tbl[i], init_tbl[i]); 154 - 155 - ret = regmap_field_read_poll_timeout(rptr->regs[F_RPTR_STATUS], 156 - val, val & RPTR_OK, 10, 5); 178 + ret = regmap_read_poll_timeout(regmap, base + EUSB2_RPTR_STATUS, val, val & RPTR_OK, 10, 5); 157 179 if (ret) 158 180 dev_err(rptr->dev, "initialization timed-out\n"); 159 181 ··· 159 191 enum phy_mode mode, int submode) 160 192 { 161 193 struct eusb2_repeater *rptr = phy_get_drvdata(phy); 194 + struct regmap *regmap = rptr->regmap; 195 + u32 base = rptr->base; 162 196 163 197 switch (mode) { 164 198 case PHY_MODE_USB_HOST: ··· 169 199 * per eUSB 1.2 Spec. Below implement software workaround until 170 200 * PHY and controller is fixing seen observation. 171 201 */ 172 - regmap_field_update_bits(rptr->regs[F_FORCE_EN_5], 173 - F_CLK_19P2M_EN, F_CLK_19P2M_EN); 174 - regmap_field_update_bits(rptr->regs[F_FORCE_VAL_5], 175 - V_CLK_19P2M_EN, V_CLK_19P2M_EN); 202 + regmap_write(regmap, base + EUSB2_FORCE_EN_5, F_CLK_19P2M_EN); 203 + regmap_write(regmap, base + EUSB2_FORCE_VAL_5, V_CLK_19P2M_EN); 176 204 break; 177 205 case PHY_MODE_USB_DEVICE: 178 206 /* ··· 179 211 * repeater doesn't clear previous value due to shared 180 212 * regulators (say host <-> device mode switch). 181 213 */ 182 - regmap_field_update_bits(rptr->regs[F_FORCE_EN_5], 183 - F_CLK_19P2M_EN, 0); 184 - regmap_field_update_bits(rptr->regs[F_FORCE_VAL_5], 185 - V_CLK_19P2M_EN, 0); 214 + regmap_write(regmap, base + EUSB2_FORCE_EN_5, 0); 215 + regmap_write(regmap, base + EUSB2_FORCE_VAL_5, 0); 186 216 break; 187 217 default: 188 218 return -EINVAL; ··· 209 243 struct device *dev = &pdev->dev; 210 244 struct phy_provider *phy_provider; 211 245 struct device_node *np = dev->of_node; 212 - struct regmap *regmap; 213 - int i, ret; 214 246 u32 res; 247 + int ret; 215 248 216 249 rptr = devm_kzalloc(dev, sizeof(*rptr), GFP_KERNEL); 217 250 if (!rptr) ··· 223 258 if (!rptr->cfg) 224 259 return -EINVAL; 225 260 226 - regmap = dev_get_regmap(dev->parent, NULL); 227 - if (!regmap) 261 + rptr->regmap = dev_get_regmap(dev->parent, NULL); 262 + if (!rptr->regmap) 228 263 return -ENODEV; 229 264 230 265 ret = of_property_read_u32(np, "reg", &res); 231 266 if (ret < 0) 232 267 return ret; 233 268 234 - for (i = 0; i < F_NUM_FIELDS; i++) 235 - eusb2_repeater_tune_reg_fields[i].reg += res; 236 - 237 - ret = devm_regmap_field_bulk_alloc(dev, regmap, rptr->regs, 238 - eusb2_repeater_tune_reg_fields, 239 - F_NUM_FIELDS); 240 - if (ret) 241 - return ret; 269 + rptr->base = res; 242 270 243 271 ret = eusb2_repeater_init_vregs(rptr); 244 272 if (ret < 0) {
+1 -1
drivers/phy/qualcomm/phy-qcom-m31.c
··· 299 299 300 300 qphy->vreg = devm_regulator_get(dev, "vdda-phy"); 301 301 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), 303 303 "failed to get vreg\n"); 304 304 305 305 phy_set_drvdata(qphy->phy, qphy);
+5 -5
drivers/phy/qualcomm/phy-qcom-qmp-usb.c
··· 1556 1556 "vdda-phy", "vdda-pll", 1557 1557 }; 1558 1558 1559 - static const struct qmp_usb_offsets qmp_usb_offsets_ipq8074 = { 1559 + static const struct qmp_usb_offsets qmp_usb_offsets_v3 = { 1560 1560 .serdes = 0, 1561 1561 .pcs = 0x800, 1562 1562 .pcs_misc = 0x600, ··· 1572 1572 .rx = 0x400, 1573 1573 }; 1574 1574 1575 - static const struct qmp_usb_offsets qmp_usb_offsets_v3 = { 1575 + static const struct qmp_usb_offsets qmp_usb_offsets_v3_msm8996 = { 1576 1576 .serdes = 0, 1577 1577 .pcs = 0x600, 1578 1578 .tx = 0x200, ··· 1624 1624 static const struct qmp_phy_cfg ipq6018_usb3phy_cfg = { 1625 1625 .lanes = 1, 1626 1626 1627 - .offsets = &qmp_usb_offsets_ipq8074, 1627 + .offsets = &qmp_usb_offsets_v3, 1628 1628 1629 1629 .serdes_tbl = ipq9574_usb3_serdes_tbl, 1630 1630 .serdes_tbl_num = ARRAY_SIZE(ipq9574_usb3_serdes_tbl), ··· 1642 1642 static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = { 1643 1643 .lanes = 1, 1644 1644 1645 - .offsets = &qmp_usb_offsets_ipq8074, 1645 + .offsets = &qmp_usb_offsets_v3, 1646 1646 1647 1647 .serdes_tbl = ipq8074_usb3_serdes_tbl, 1648 1648 .serdes_tbl_num = ARRAY_SIZE(ipq8074_usb3_serdes_tbl), ··· 1678 1678 static const struct qmp_phy_cfg msm8996_usb3phy_cfg = { 1679 1679 .lanes = 1, 1680 1680 1681 - .offsets = &qmp_usb_offsets_v3, 1681 + .offsets = &qmp_usb_offsets_v3_msm8996, 1682 1682 1683 1683 .serdes_tbl = msm8996_usb3_serdes_tbl, 1684 1684 .serdes_tbl_num = ARRAY_SIZE(msm8996_usb3_serdes_tbl),