hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/vc4/vc4_dpi.c
....@@ -148,35 +148,45 @@
148148 }
149149 drm_connector_list_iter_end(&conn_iter);
150150
151
- if (connector && connector->display_info.num_bus_formats) {
152
- u32 bus_format = connector->display_info.bus_formats[0];
151
+ if (connector) {
152
+ if (connector->display_info.num_bus_formats) {
153
+ u32 bus_format = connector->display_info.bus_formats[0];
153154
154
- switch (bus_format) {
155
- case MEDIA_BUS_FMT_RGB888_1X24:
156
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
157
- DPI_FORMAT);
158
- break;
159
- case MEDIA_BUS_FMT_BGR888_1X24:
160
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
161
- DPI_FORMAT);
162
- dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR, DPI_ORDER);
163
- break;
164
- case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
165
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
166
- DPI_FORMAT);
167
- break;
168
- case MEDIA_BUS_FMT_RGB666_1X18:
169
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
170
- DPI_FORMAT);
171
- break;
172
- case MEDIA_BUS_FMT_RGB565_1X16:
173
- dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_3,
174
- DPI_FORMAT);
175
- break;
176
- default:
177
- DRM_ERROR("Unknown media bus format %d\n", bus_format);
178
- break;
155
+ switch (bus_format) {
156
+ case MEDIA_BUS_FMT_RGB888_1X24:
157
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
158
+ DPI_FORMAT);
159
+ break;
160
+ case MEDIA_BUS_FMT_BGR888_1X24:
161
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB,
162
+ DPI_FORMAT);
163
+ dpi_c |= VC4_SET_FIELD(DPI_ORDER_BGR,
164
+ DPI_ORDER);
165
+ break;
166
+ case MEDIA_BUS_FMT_RGB666_1X24_CPADHI:
167
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_2,
168
+ DPI_FORMAT);
169
+ break;
170
+ case MEDIA_BUS_FMT_RGB666_1X18:
171
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_18BIT_666_RGB_1,
172
+ DPI_FORMAT);
173
+ break;
174
+ case MEDIA_BUS_FMT_RGB565_1X16:
175
+ dpi_c |= VC4_SET_FIELD(DPI_FORMAT_16BIT_565_RGB_1,
176
+ DPI_FORMAT);
177
+ break;
178
+ default:
179
+ DRM_ERROR("Unknown media bus format %d\n",
180
+ bus_format);
181
+ break;
182
+ }
179183 }
184
+
185
+ if (connector->display_info.bus_flags & DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGE)
186
+ dpi_c |= DPI_PIXEL_CLK_INVERT;
187
+
188
+ if (connector->display_info.bus_flags & DRM_BUS_FLAG_DE_LOW)
189
+ dpi_c |= DPI_OUTPUT_ENABLE_INVERT;
180190 } else {
181191 /* Default to 24bit if no connector found. */
182192 dpi_c |= VC4_SET_FIELD(DPI_FORMAT_24BIT_888_RGB, DPI_FORMAT);