hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mfd/display-serdes/serdes-panel.c
....@@ -91,7 +91,7 @@
9191 struct serdes *serdes = serdes_panel->parent;
9292 struct drm_display_mode *mode;
9393 u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
94
- int ret = 0;
94
+ int ret = 1;
9595
9696 connector->display_info.width_mm = serdes_panel->width_mm; //323; //346;
9797 connector->display_info.height_mm = serdes_panel->height_mm; //182; //194;
....@@ -108,8 +108,18 @@
108108 if (serdes->chip_data->panel_ops && serdes->chip_data->panel_ops->get_modes)
109109 ret = serdes->chip_data->panel_ops->get_modes(serdes);
110110
111
- SERDES_DBG_MFD("%s: %s node=%s\n", __func__,
112
- serdes->chip_data->name, panel->dev->of_node->name);
111
+ dev_info(serdes->dev, "%s wxh=%dx%d mode clock %u kHz, flags[0x%x]\n"
112
+ " H: %04d %04d %04d %04d\n"
113
+ " V: %04d %04d %04d %04d\n"
114
+ "bus_format: 0x%x\n",
115
+ panel->dev->of_node->name,
116
+ serdes_panel->width_mm, serdes_panel->height_mm,
117
+ mode->clock, mode->flags,
118
+ mode->hdisplay, mode->hsync_start,
119
+ mode->hsync_end, mode->htotal,
120
+ mode->vdisplay, mode->vsync_start,
121
+ mode->vsync_end, mode->vtotal,
122
+ bus_format);
113123
114124 return ret;
115125 }
....@@ -129,12 +139,24 @@
129139 struct videomode vm;
130140 int ret, len;
131141 unsigned int panel_size[2] = {320, 180};
142
+ unsigned int link_rate_count_ssc[3] = {DP_LINK_BW_2_7, 4, 0};
143
+
144
+ //pr_info("%s: node=%s\n", __func__, dev->of_node->name);
132145
133146 serdes_panel->width_mm = panel_size[0];
134147 serdes_panel->height_mm = panel_size[1];
135148
149
+ serdes_panel->link_rate = link_rate_count_ssc[0];
150
+ serdes_panel->lane_count = link_rate_count_ssc[1];
151
+ serdes_panel->ssc = link_rate_count_ssc[2];
152
+
136153 if (of_find_property(dev->of_node, "panel-size", &len)) {
137154 len /= sizeof(unsigned int);
155
+ if (len != 2) {
156
+ dev_err(dev, "panel-size length is error, set 2 default\n",
157
+ dev->of_node);
158
+ len = 2;
159
+ }
138160 ret = of_property_read_u32_array(dev->of_node, "panel-size",
139161 panel_size, len);
140162 if (!ret) {
....@@ -143,8 +165,25 @@
143165 }
144166 }
145167
146
- dev_info(dev, "panle size %dx%d\n",
147
- serdes_panel->width_mm, serdes_panel->height_mm);
168
+ if (of_find_property(dev->of_node, "rate-count-ssc", &len)) {
169
+ len /= sizeof(unsigned int);
170
+ if (len != 3) {
171
+ dev_err(dev, "rate-count-ssc length is error, set 3 default\n",
172
+ dev->of_node);
173
+ len = 3;
174
+ }
175
+ ret = of_property_read_u32_array(dev->of_node, "rate-count-ssc",
176
+ link_rate_count_ssc, len);
177
+ if (!ret) {
178
+ serdes_panel->link_rate = link_rate_count_ssc[0];
179
+ serdes_panel->lane_count = link_rate_count_ssc[1];
180
+ serdes_panel->ssc = link_rate_count_ssc[2];
181
+ }
182
+ }
183
+
184
+ dev_info(dev, "panle size %dx%d, rate=%d, cnt=%d, ssc=%d\n",
185
+ serdes_panel->width_mm, serdes_panel->height_mm,
186
+ serdes_panel->link_rate, serdes_panel->lane_count, serdes_panel->ssc);
148187
149188 ret = of_get_display_timing(dev->of_node, "panel-timing", &dt);
150189 if (ret < 0) {
....@@ -196,7 +235,8 @@
196235 }
197236 drm_panel_add(&serdes_panel->panel);
198237
199
- dev_info(dev, "serdes %s serdes_panel_probe successful\n", serdes->chip_data->name);
238
+ dev_info(dev, "serdes %s-%s serdes_panel_probe successful\n",
239
+ dev_name(serdes->dev), serdes->chip_data->name);
200240
201241 return 0;
202242 }
....@@ -211,7 +251,6 @@
211251 }
212252
213253 static const struct of_device_id serdes_panel_of_match[] = {
214
- { .compatible = "rohm,bu18tl82-panel" },
215254 { .compatible = "rohm,bu18rl82-panel" },
216255 { .compatible = "maxim,max96752-panel" },
217256 { .compatible = "maxim,max96772-panel" },