hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mfd/display-serdes/serdes-core.c
....@@ -62,6 +62,10 @@
6262 .name = "serdes-bridge",
6363 .of_compatible = "maxim,max96789-bridge",
6464 },
65
+ {
66
+ .name = "serdes-bridge-split",
67
+ .of_compatible = "maxim,max96789-bridge-split",
68
+ },
6569 };
6670
6771 static const struct mfd_cell serdes_max96752_devs[] = {
....@@ -72,6 +76,10 @@
7276 {
7377 .name = "serdes-panel",
7478 .of_compatible = "maxim,max96752-panel",
79
+ },
80
+ {
81
+ .name = "serdes-panel-split",
82
+ .of_compatible = "maxim,max96752-panel-split",
7583 },
7684 };
7785
....@@ -127,8 +135,8 @@
127135 int ret;
128136
129137 ret = regmap_read(serdes->regmap, reg, val);
130
- SERDES_DBG_I2C("%s %s Read Reg%04x %04x\n", __func__,
131
- serdes->chip_data->name, reg, *val);
138
+ SERDES_DBG_I2C("%s %s %s Read Reg%04x %04x ret=%d\n", __func__, dev_name(serdes->dev),
139
+ serdes->chip_data->name, reg, *val, ret);
132140 return ret;
133141 }
134142 EXPORT_SYMBOL_GPL(serdes_reg_read);
....@@ -148,8 +156,9 @@
148156
149157 ret = regmap_bulk_read(serdes->regmap, reg, buf, count);
150158 for (i = 0; i < count; i++) {
151
- SERDES_DBG_I2C("%s %s %s Read Reg%04x %04x\n", __func__, dev_name(serdes->dev),
152
- serdes->chip_data->name, reg + i, buf[i]);
159
+ SERDES_DBG_I2C("%s %s %s Read Reg%04x %04x ret=%d\n",
160
+ __func__, dev_name(serdes->dev),
161
+ serdes->chip_data->name, reg + i, buf[i], ret);
153162 }
154163
155164 return ret;
....@@ -166,9 +175,10 @@
166175
167176 mutex_lock(&serdes->io_lock);
168177 for (i = 0; i < count; i++) {
169
- SERDES_DBG_I2C("%s %s %s Write Reg%04x %04x\n", __func__, dev_name(serdes->dev),
170
- serdes->chip_data->name, reg, buf[i]);
171178 ret = regmap_write(serdes->regmap, reg, buf[i]);
179
+ SERDES_DBG_I2C("%s %s %s Write Reg%04x %04x ret=%d\n",
180
+ __func__, dev_name(serdes->dev),
181
+ serdes->chip_data->name, reg, buf[i], ret);
172182 if (ret != 0) {
173183 mutex_unlock(&serdes->io_lock);
174184 return ret;
....@@ -193,12 +203,11 @@
193203
194204 SERDES_DBG_I2C("%s %s %s num=%d\n", __func__, dev_name(serdes->dev),
195205 serdes->chip_data->name, num_regs);
196
- for (i = 0; i < num_regs; i++) {
197
- SERDES_DBG_I2C("serdes %s Write Reg%04x %04x\n",
198
- serdes->chip_data->name, regs[i].reg, regs[i].def);
199
- }
200
-
201206 ret = regmap_multi_reg_write(serdes->regmap, regs, num_regs);
207
+ for (i = 0; i < num_regs; i++) {
208
+ SERDES_DBG_I2C("serdes %s Write Reg%04x %04x ret=%d\n",
209
+ serdes->chip_data->name, regs[i].reg, regs[i].def, ret);
210
+ }
202211
203212 return ret;
204213 }
....@@ -216,9 +225,9 @@
216225 {
217226 int ret;
218227
219
- SERDES_DBG_I2C("%s %s %s Write Reg%04x %04x)\n", __func__, dev_name(serdes->dev),
220
- serdes->chip_data->name, reg, val);
221228 ret = regmap_write(serdes->regmap, reg, val);
229
+ SERDES_DBG_I2C("%s %s %s Write Reg%04x %04x ret=%d\n", __func__, dev_name(serdes->dev),
230
+ serdes->chip_data->name, reg, val, ret);
222231 if (ret != 0)
223232 return ret;
224233
....@@ -322,7 +331,14 @@
322331 ret = pinctrl_select_state(serdes->pinctrl_node, serdes->pins_default);
323332 if (ret)
324333 dev_err(serdes->dev, "could not set default pins\n");
325
- SERDES_DBG_MFD("%s: name=%s\n", __func__, dev_name(serdes->dev));
334
+ SERDES_DBG_MFD("%s: name=%s default\n", __func__, dev_name(serdes->dev));
335
+ }
336
+
337
+ if ((!IS_ERR(serdes->pinctrl_node)) && (!IS_ERR(serdes->pins_init))) {
338
+ ret = pinctrl_select_state(serdes->pinctrl_node, serdes->pins_init);
339
+ if (ret)
340
+ dev_err(serdes->dev, "could not set init pins\n");
341
+ SERDES_DBG_MFD("%s: name=%s init\n", __func__, dev_name(serdes->dev));
326342 }
327343
328344 return ret;
....@@ -376,7 +392,7 @@
376392 }
377393 EXPORT_SYMBOL_GPL(serdes_device_resume);
378394
379
-void serdes_device_shutdown(struct serdes *serdes)
395
+void serdes_device_poweroff(struct serdes *serdes)
380396 {
381397 int ret = 0;
382398
....@@ -385,6 +401,29 @@
385401 if (ret)
386402 dev_err(serdes->dev, "could not set sleep pins\n");
387403 }
404
+
405
+ if (!IS_ERR(serdes->vpower)) {
406
+ ret = regulator_disable(serdes->vpower);
407
+ if (ret)
408
+ dev_err(serdes->dev, "fail to disable vpower regulator\n");
409
+ }
410
+
411
+}
412
+EXPORT_SYMBOL_GPL(serdes_device_poweroff);
413
+
414
+int serdes_device_shutdown(struct serdes *serdes)
415
+{
416
+ int ret = 0;
417
+
418
+ if (!IS_ERR(serdes->vpower)) {
419
+ ret = regulator_disable(serdes->vpower);
420
+ if (ret) {
421
+ dev_err(serdes->dev, "fail to disable vpower regulator\n");
422
+ return ret;
423
+ }
424
+ }
425
+
426
+ return ret;
388427 }
389428 EXPORT_SYMBOL_GPL(serdes_device_shutdown);
390429