]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/gpu/drm/panel/panel-simple.c
drm/panel: Add support for AUO B116XAK01 panel
[linux.git] / drivers / gpu / drm / panel / panel-simple.c
index 1309ca7454b95588869fb5cca1dd26cc161844d1..0c3444c62014de7c72d7af132c6264728e9defa3 100644 (file)
@@ -120,7 +120,6 @@ static inline struct panel_simple *to_panel_simple(struct drm_panel *panel)
 static unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
                                                   struct drm_connector *connector)
 {
-       struct drm_device *drm = panel->base.drm;
        struct drm_display_mode *mode;
        unsigned int i, num = 0;
 
@@ -129,9 +128,9 @@ static unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
                struct videomode vm;
 
                videomode_from_timing(dt, &vm);
-               mode = drm_mode_create(drm);
+               mode = drm_mode_create(connector->dev);
                if (!mode) {
-                       dev_err(drm->dev, "failed to add mode %ux%u\n",
+                       dev_err(panel->base.dev, "failed to add mode %ux%u\n",
                                dt->hactive.typ, dt->vactive.typ);
                        continue;
                }
@@ -153,16 +152,15 @@ static unsigned int panel_simple_get_timings_modes(struct panel_simple *panel,
 static unsigned int panel_simple_get_display_modes(struct panel_simple *panel,
                                                   struct drm_connector *connector)
 {
-       struct drm_device *drm = panel->base.drm;
        struct drm_display_mode *mode;
        unsigned int i, num = 0;
 
        for (i = 0; i < panel->desc->num_modes; i++) {
                const struct drm_display_mode *m = &panel->desc->modes[i];
 
-               mode = drm_mode_duplicate(drm, m);
+               mode = drm_mode_duplicate(connector->dev, m);
                if (!mode) {
-                       dev_err(drm->dev, "failed to add mode %ux%u@%u\n",
+                       dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n",
                                m->hdisplay, m->vdisplay, m->vrefresh);
                        continue;
                }
@@ -184,7 +182,6 @@ static unsigned int panel_simple_get_display_modes(struct panel_simple *panel,
 static int panel_simple_get_non_edid_modes(struct panel_simple *panel,
                                           struct drm_connector *connector)
 {
-       struct drm_device *drm = panel->base.drm;
        struct drm_display_mode *mode;
        bool has_override = panel->override_mode.type;
        unsigned int num = 0;
@@ -193,12 +190,13 @@ static int panel_simple_get_non_edid_modes(struct panel_simple *panel,
                return 0;
 
        if (has_override) {
-               mode = drm_mode_duplicate(drm, &panel->override_mode);
+               mode = drm_mode_duplicate(connector->dev,
+                                         &panel->override_mode);
                if (mode) {
                        drm_mode_probed_add(connector, mode);
                        num = 1;
                } else {
-                       dev_err(drm->dev, "failed to add override mode\n");
+                       dev_err(panel->base.dev, "failed to add override mode\n");
                }
        }
 
@@ -631,6 +629,35 @@ static const struct panel_desc auo_b101xtn01 = {
        },
 };
 
+static const struct drm_display_mode auo_b116xak01_mode = {
+       .clock = 69300,
+       .hdisplay = 1366,
+       .hsync_start = 1366 + 48,
+       .hsync_end = 1366 + 48 + 32,
+       .htotal = 1366 + 48 + 32 + 10,
+       .vdisplay = 768,
+       .vsync_start = 768 + 4,
+       .vsync_end = 768 + 4 + 6,
+       .vtotal = 768 + 4 + 6 + 15,
+       .vrefresh = 60,
+       .flags = DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC,
+};
+
+static const struct panel_desc auo_b116xak01 = {
+       .modes = &auo_b116xak01_mode,
+       .num_modes = 1,
+       .bpc = 6,
+       .size = {
+               .width = 256,
+               .height = 144,
+       },
+       .delay = {
+               .hpd_absent_delay = 200,
+       },
+       .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
+       .connector_type = DRM_MODE_CONNECTOR_eDP,
+};
+
 static const struct drm_display_mode auo_b116xw03_mode = {
        .clock = 70589,
        .hdisplay = 1366,
@@ -3127,6 +3154,9 @@ static const struct of_device_id platform_of_match[] = {
        }, {
                .compatible = "auo,b101xtn01",
                .data = &auo_b101xtn01,
+       }, {
+               .compatible = "auo,b116xa01",
+               .data = &auo_b116xak01,
        }, {
                .compatible = "auo,b116xw03",
                .data = &auo_b116xw03,