Merge drm/drm-next into drm-misc-next
[linux-2.6-microblaze.git] / drivers / gpu / drm / panel / panel-simple.c
index cb6550d..ef8df83 100644 (file)
@@ -500,6 +500,8 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
        struct panel_simple *panel;
        struct display_timing dt;
        struct device_node *ddc;
+       int connector_type;
+       u32 bus_flags;
        int err;
 
        panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL);
@@ -549,8 +551,14 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
                        panel_simple_parse_panel_timing_node(dev, panel, &dt);
        }
 
-       if (desc->connector_type == DRM_MODE_CONNECTOR_LVDS) {
-               /* Catch common mistakes for LVDS panels. */
+       connector_type = desc->connector_type;
+       /* Catch common mistakes for panels. */
+       switch (connector_type) {
+       case 0:
+               dev_warn(dev, "Specify missing connector_type\n");
+               connector_type = DRM_MODE_CONNECTOR_DPI;
+               break;
+       case DRM_MODE_CONNECTOR_LVDS:
                WARN_ON(desc->bus_flags &
                        ~(DRM_BUS_FLAG_DE_LOW |
                          DRM_BUS_FLAG_DE_HIGH |
@@ -564,18 +572,48 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
                WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG ||
                         desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) &&
                        desc->bpc != 8);
+               break;
+       case DRM_MODE_CONNECTOR_eDP:
+               if (desc->bus_format == 0)
+                       dev_warn(dev, "Specify missing bus_format\n");
+               if (desc->bpc != 6 && desc->bpc != 8)
+                       dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
+               break;
+       case DRM_MODE_CONNECTOR_DSI:
+               if (desc->bpc != 6 && desc->bpc != 8)
+                       dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
+               break;
+       case DRM_MODE_CONNECTOR_DPI:
+               bus_flags = DRM_BUS_FLAG_DE_LOW |
+                           DRM_BUS_FLAG_DE_HIGH |
+                           DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE |
+                           DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
+                           DRM_BUS_FLAG_DATA_MSB_TO_LSB |
+                           DRM_BUS_FLAG_DATA_LSB_TO_MSB |
+                           DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE |
+                           DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE;
+               if (desc->bus_flags & ~bus_flags)
+                       dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags);
+               if (!(desc->bus_flags & bus_flags))
+                       dev_warn(dev, "Specify missing bus_flags\n");
+               if (desc->bus_format == 0)
+                       dev_warn(dev, "Specify missing bus_format\n");
+               if (desc->bpc != 6 && desc->bpc != 8)
+                       dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc);
+               break;
+       default:
+               dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type);
+               connector_type = DRM_MODE_CONNECTOR_DPI;
+               break;
        }
 
-       drm_panel_init(&panel->base, dev, &panel_simple_funcs,
-                      desc->connector_type);
+       drm_panel_init(&panel->base, dev, &panel_simple_funcs, connector_type);
 
        err = drm_panel_of_backlight(&panel->base);
        if (err)
                goto free_ddc;
 
-       err = drm_panel_add(&panel->base);
-       if (err < 0)
-               goto free_ddc;
+       drm_panel_add(&panel->base);
 
        dev_set_drvdata(dev, panel);
 
@@ -1191,10 +1229,14 @@ static const struct drm_display_mode boe_hv070wsa_mode = {
 static const struct panel_desc boe_hv070wsa = {
        .modes = &boe_hv070wsa_mode,
        .num_modes = 1,
+       .bpc = 8,
        .size = {
                .width = 154,
                .height = 90,
        },
+       .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+       .bus_flags = DRM_BUS_FLAG_DE_HIGH,
+       .connector_type = DRM_MODE_CONNECTOR_LVDS,
 };
 
 static const struct drm_display_mode boe_nv101wxmn51_modes[] = {
@@ -1414,6 +1456,36 @@ static const struct panel_desc cdtech_s070wv95_ct16 = {
        },
 };
 
+static const struct display_timing chefree_ch101olhlwh_002_timing = {
+       .pixelclock = { 68900000, 71100000, 73400000 },
+       .hactive = { 1280, 1280, 1280 },
+       .hfront_porch = { 65, 80, 95 },
+       .hback_porch = { 64, 79, 94 },
+       .hsync_len = { 1, 1, 1 },
+       .vactive = { 800, 800, 800 },
+       .vfront_porch = { 7, 11, 14 },
+       .vback_porch = { 7, 11, 14 },
+       .vsync_len = { 1, 1, 1 },
+       .flags = DISPLAY_FLAGS_DE_HIGH,
+};
+
+static const struct panel_desc chefree_ch101olhlwh_002 = {
+       .timings = &chefree_ch101olhlwh_002_timing,
+       .num_timings = 1,
+       .bpc = 8,
+       .size = {
+               .width = 217,
+               .height = 135,
+       },
+       .delay = {
+               .enable = 200,
+               .disable = 200,
+       },
+       .bus_flags = DRM_BUS_FLAG_DE_HIGH,
+       .bus_format = MEDIA_BUS_FMT_RGB888_1X7X4_SPWG,
+       .connector_type = DRM_MODE_CONNECTOR_LVDS,
+};
+
 static const struct drm_display_mode chunghwa_claa070wp03xg_mode = {
        .clock = 66770,
        .hdisplay = 800,
@@ -3000,6 +3072,31 @@ static const struct panel_desc pda_91_00156_a0  = {
        .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
 };
 
+static const struct drm_display_mode powertip_ph800480t013_idf02_mode = {
+       .clock = 24750,
+       .hdisplay = 800,
+       .hsync_start = 800 + 54,
+       .hsync_end = 800 + 54 + 2,
+       .htotal = 800 + 54 + 2 + 44,
+       .vdisplay = 480,
+       .vsync_start = 480 + 49,
+       .vsync_end = 480 + 49 + 2,
+       .vtotal = 480 + 49 + 2 + 22,
+};
+
+static const struct panel_desc powertip_ph800480t013_idf02  = {
+       .modes = &powertip_ph800480t013_idf02_mode,
+       .num_modes = 1,
+       .size = {
+               .width = 152,
+               .height = 91,
+       },
+       .bus_flags = DRM_BUS_FLAG_DE_HIGH |
+                    DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE |
+                    DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE,
+       .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
+       .connector_type = DRM_MODE_CONNECTOR_DPI,
+};
 
 static const struct drm_display_mode qd43003c0_40_mode = {
        .clock = 9000,
@@ -3820,6 +3917,9 @@ static const struct of_device_id platform_of_match[] = {
        }, {
                .compatible = "cdtech,s070wv95-ct16",
                .data = &cdtech_s070wv95_ct16,
+       }, {
+               .compatible = "chefree,ch101olhlwh-002",
+               .data = &chefree_ch101olhlwh_002,
        }, {
                .compatible = "chunghwa,claa070wp03xg",
                .data = &chunghwa_claa070wp03xg,
@@ -4012,6 +4112,9 @@ static const struct of_device_id platform_of_match[] = {
        }, {
                .compatible = "pda,91-00156-a0",
                .data = &pda_91_00156_a0,
+       }, {
+               .compatible = "powertip,ph800480t013-idf02",
+               .data = &powertip_ph800480t013_idf02,
        }, {
                .compatible = "qiaodian,qd43003c0-40",
                .data = &qd43003c0_40,