diff options
Diffstat (limited to 'drivers/video/omap2/displays')
-rw-r--r-- | drivers/video/omap2/displays/panel-acx565akm.c | 7 | ||||
-rw-r--r-- | drivers/video/omap2/displays/panel-generic-dpi.c | 107 | ||||
-rw-r--r-- | drivers/video/omap2/displays/panel-n8x0.c | 8 | ||||
-rw-r--r-- | drivers/video/omap2/displays/panel-taal.c | 88 | ||||
-rw-r--r-- | drivers/video/omap2/displays/panel-tfp410.c | 76 | ||||
-rw-r--r-- | drivers/video/omap2/displays/panel-tpo-td043mtea1.c | 22 |
6 files changed, 160 insertions, 148 deletions
diff --git a/drivers/video/omap2/displays/panel-acx565akm.c b/drivers/video/omap2/displays/panel-acx565akm.c index 74e7cf07850..ad741c3d1ae 100644 --- a/drivers/video/omap2/displays/panel-acx565akm.c +++ b/drivers/video/omap2/displays/panel-acx565akm.c | |||
@@ -739,12 +739,6 @@ static void acx_panel_set_timings(struct omap_dss_device *dssdev, | |||
739 | } | 739 | } |
740 | } | 740 | } |
741 | 741 | ||
742 | static void acx_panel_get_timings(struct omap_dss_device *dssdev, | ||
743 | struct omap_video_timings *timings) | ||
744 | { | ||
745 | *timings = dssdev->panel.timings; | ||
746 | } | ||
747 | |||
748 | static int acx_panel_check_timings(struct omap_dss_device *dssdev, | 742 | static int acx_panel_check_timings(struct omap_dss_device *dssdev, |
749 | struct omap_video_timings *timings) | 743 | struct omap_video_timings *timings) |
750 | { | 744 | { |
@@ -762,7 +756,6 @@ static struct omap_dss_driver acx_panel_driver = { | |||
762 | .resume = acx_panel_resume, | 756 | .resume = acx_panel_resume, |
763 | 757 | ||
764 | .set_timings = acx_panel_set_timings, | 758 | .set_timings = acx_panel_set_timings, |
765 | .get_timings = acx_panel_get_timings, | ||
766 | .check_timings = acx_panel_check_timings, | 759 | .check_timings = acx_panel_check_timings, |
767 | 760 | ||
768 | .get_recommended_bpp = acx_get_recommended_bpp, | 761 | .get_recommended_bpp = acx_get_recommended_bpp, |
diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c index 30fe4dfeb22..e42f9dc2212 100644 --- a/drivers/video/omap2/displays/panel-generic-dpi.c +++ b/drivers/video/omap2/displays/panel-generic-dpi.c | |||
@@ -386,6 +386,106 @@ static struct panel_config generic_dpi_panels[] = { | |||
386 | 386 | ||
387 | .name = "innolux_at080tn52", | 387 | .name = "innolux_at080tn52", |
388 | }, | 388 | }, |
389 | |||
390 | /* Mitsubishi AA084SB01 */ | ||
391 | { | ||
392 | { | ||
393 | .x_res = 800, | ||
394 | .y_res = 600, | ||
395 | .pixel_clock = 40000, | ||
396 | |||
397 | .hsw = 1, | ||
398 | .hfp = 254, | ||
399 | .hbp = 1, | ||
400 | |||
401 | .vsw = 1, | ||
402 | .vfp = 26, | ||
403 | .vbp = 1, | ||
404 | }, | ||
405 | .config = OMAP_DSS_LCD_TFT, | ||
406 | .name = "mitsubishi_aa084sb01", | ||
407 | }, | ||
408 | /* EDT ET0500G0DH6 */ | ||
409 | { | ||
410 | { | ||
411 | .x_res = 800, | ||
412 | .y_res = 480, | ||
413 | .pixel_clock = 33260, | ||
414 | |||
415 | .hsw = 128, | ||
416 | .hfp = 216, | ||
417 | .hbp = 40, | ||
418 | |||
419 | .vsw = 2, | ||
420 | .vfp = 35, | ||
421 | .vbp = 10, | ||
422 | }, | ||
423 | .config = OMAP_DSS_LCD_TFT, | ||
424 | .name = "edt_et0500g0dh6", | ||
425 | }, | ||
426 | |||
427 | /* Prime-View PD050VL1 */ | ||
428 | { | ||
429 | { | ||
430 | .x_res = 640, | ||
431 | .y_res = 480, | ||
432 | |||
433 | .pixel_clock = 25000, | ||
434 | |||
435 | .hsw = 96, | ||
436 | .hfp = 18, | ||
437 | .hbp = 46, | ||
438 | |||
439 | .vsw = 2, | ||
440 | .vfp = 10, | ||
441 | .vbp = 33, | ||
442 | }, | ||
443 | .config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS | | ||
444 | OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC, | ||
445 | .name = "primeview_pd050vl1", | ||
446 | }, | ||
447 | |||
448 | /* Prime-View PM070WL4 */ | ||
449 | { | ||
450 | { | ||
451 | .x_res = 800, | ||
452 | .y_res = 480, | ||
453 | |||
454 | .pixel_clock = 32000, | ||
455 | |||
456 | .hsw = 128, | ||
457 | .hfp = 42, | ||
458 | .hbp = 86, | ||
459 | |||
460 | .vsw = 2, | ||
461 | .vfp = 10, | ||
462 | .vbp = 33, | ||
463 | }, | ||
464 | .config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS | | ||
465 | OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC, | ||
466 | .name = "primeview_pm070wl4", | ||
467 | }, | ||
468 | |||
469 | /* Prime-View PD104SLF */ | ||
470 | { | ||
471 | { | ||
472 | .x_res = 800, | ||
473 | .y_res = 600, | ||
474 | |||
475 | .pixel_clock = 40000, | ||
476 | |||
477 | .hsw = 128, | ||
478 | .hfp = 42, | ||
479 | .hbp = 86, | ||
480 | |||
481 | .vsw = 4, | ||
482 | .vfp = 1, | ||
483 | .vbp = 23, | ||
484 | }, | ||
485 | .config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS | | ||
486 | OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC, | ||
487 | .name = "primeview_pd104slf", | ||
488 | }, | ||
389 | }; | 489 | }; |
390 | 490 | ||
391 | struct panel_drv_data { | 491 | struct panel_drv_data { |
@@ -549,12 +649,6 @@ static void generic_dpi_panel_set_timings(struct omap_dss_device *dssdev, | |||
549 | dpi_set_timings(dssdev, timings); | 649 | dpi_set_timings(dssdev, timings); |
550 | } | 650 | } |
551 | 651 | ||
552 | static void generic_dpi_panel_get_timings(struct omap_dss_device *dssdev, | ||
553 | struct omap_video_timings *timings) | ||
554 | { | ||
555 | *timings = dssdev->panel.timings; | ||
556 | } | ||
557 | |||
558 | static int generic_dpi_panel_check_timings(struct omap_dss_device *dssdev, | 652 | static int generic_dpi_panel_check_timings(struct omap_dss_device *dssdev, |
559 | struct omap_video_timings *timings) | 653 | struct omap_video_timings *timings) |
560 | { | 654 | { |
@@ -571,7 +665,6 @@ static struct omap_dss_driver dpi_driver = { | |||
571 | .resume = generic_dpi_panel_resume, | 665 | .resume = generic_dpi_panel_resume, |
572 | 666 | ||
573 | .set_timings = generic_dpi_panel_set_timings, | 667 | .set_timings = generic_dpi_panel_set_timings, |
574 | .get_timings = generic_dpi_panel_get_timings, | ||
575 | .check_timings = generic_dpi_panel_check_timings, | 668 | .check_timings = generic_dpi_panel_check_timings, |
576 | 669 | ||
577 | .driver = { | 670 | .driver = { |
diff --git a/drivers/video/omap2/displays/panel-n8x0.c b/drivers/video/omap2/displays/panel-n8x0.c index dc9408dc93d..4a34cdc1371 100644 --- a/drivers/video/omap2/displays/panel-n8x0.c +++ b/drivers/video/omap2/displays/panel-n8x0.c | |||
@@ -610,12 +610,6 @@ static int n8x0_panel_resume(struct omap_dss_device *dssdev) | |||
610 | return 0; | 610 | return 0; |
611 | } | 611 | } |
612 | 612 | ||
613 | static void n8x0_panel_get_timings(struct omap_dss_device *dssdev, | ||
614 | struct omap_video_timings *timings) | ||
615 | { | ||
616 | *timings = dssdev->panel.timings; | ||
617 | } | ||
618 | |||
619 | static void n8x0_panel_get_resolution(struct omap_dss_device *dssdev, | 613 | static void n8x0_panel_get_resolution(struct omap_dss_device *dssdev, |
620 | u16 *xres, u16 *yres) | 614 | u16 *xres, u16 *yres) |
621 | { | 615 | { |
@@ -678,8 +672,6 @@ static struct omap_dss_driver n8x0_panel_driver = { | |||
678 | .get_resolution = n8x0_panel_get_resolution, | 672 | .get_resolution = n8x0_panel_get_resolution, |
679 | .get_recommended_bpp = omapdss_default_get_recommended_bpp, | 673 | .get_recommended_bpp = omapdss_default_get_recommended_bpp, |
680 | 674 | ||
681 | .get_timings = n8x0_panel_get_timings, | ||
682 | |||
683 | .driver = { | 675 | .driver = { |
684 | .name = "n8x0_panel", | 676 | .name = "n8x0_panel", |
685 | .owner = THIS_MODULE, | 677 | .owner = THIS_MODULE, |
diff --git a/drivers/video/omap2/displays/panel-taal.c b/drivers/video/omap2/displays/panel-taal.c index b2dd88b4842..2ce9992f403 100644 --- a/drivers/video/omap2/displays/panel-taal.c +++ b/drivers/video/omap2/displays/panel-taal.c | |||
@@ -30,7 +30,6 @@ | |||
30 | #include <linux/gpio.h> | 30 | #include <linux/gpio.h> |
31 | #include <linux/workqueue.h> | 31 | #include <linux/workqueue.h> |
32 | #include <linux/slab.h> | 32 | #include <linux/slab.h> |
33 | #include <linux/regulator/consumer.h> | ||
34 | #include <linux/mutex.h> | 33 | #include <linux/mutex.h> |
35 | 34 | ||
36 | #include <video/omapdss.h> | 35 | #include <video/omapdss.h> |
@@ -55,73 +54,6 @@ static int _taal_enable_te(struct omap_dss_device *dssdev, bool enable); | |||
55 | 54 | ||
56 | static int taal_panel_reset(struct omap_dss_device *dssdev); | 55 | static int taal_panel_reset(struct omap_dss_device *dssdev); |
57 | 56 | ||
58 | struct panel_regulator { | ||
59 | struct regulator *regulator; | ||
60 | const char *name; | ||
61 | int min_uV; | ||
62 | int max_uV; | ||
63 | }; | ||
64 | |||
65 | static void free_regulators(struct panel_regulator *regulators, int n) | ||
66 | { | ||
67 | int i; | ||
68 | |||
69 | for (i = 0; i < n; i++) { | ||
70 | /* disable/put in reverse order */ | ||
71 | regulator_disable(regulators[n - i - 1].regulator); | ||
72 | regulator_put(regulators[n - i - 1].regulator); | ||
73 | } | ||
74 | } | ||
75 | |||
76 | static int init_regulators(struct omap_dss_device *dssdev, | ||
77 | struct panel_regulator *regulators, int n) | ||
78 | { | ||
79 | int r, i, v; | ||
80 | |||
81 | for (i = 0; i < n; i++) { | ||
82 | struct regulator *reg; | ||
83 | |||
84 | reg = regulator_get(&dssdev->dev, regulators[i].name); | ||
85 | if (IS_ERR(reg)) { | ||
86 | dev_err(&dssdev->dev, "failed to get regulator %s\n", | ||
87 | regulators[i].name); | ||
88 | r = PTR_ERR(reg); | ||
89 | goto err; | ||
90 | } | ||
91 | |||
92 | /* FIXME: better handling of fixed vs. variable regulators */ | ||
93 | v = regulator_get_voltage(reg); | ||
94 | if (v < regulators[i].min_uV || v > regulators[i].max_uV) { | ||
95 | r = regulator_set_voltage(reg, regulators[i].min_uV, | ||
96 | regulators[i].max_uV); | ||
97 | if (r) { | ||
98 | dev_err(&dssdev->dev, | ||
99 | "failed to set regulator %s voltage\n", | ||
100 | regulators[i].name); | ||
101 | regulator_put(reg); | ||
102 | goto err; | ||
103 | } | ||
104 | } | ||
105 | |||
106 | r = regulator_enable(reg); | ||
107 | if (r) { | ||
108 | dev_err(&dssdev->dev, "failed to enable regulator %s\n", | ||
109 | regulators[i].name); | ||
110 | regulator_put(reg); | ||
111 | goto err; | ||
112 | } | ||
113 | |||
114 | regulators[i].regulator = reg; | ||
115 | } | ||
116 | |||
117 | return 0; | ||
118 | |||
119 | err: | ||
120 | free_regulators(regulators, i); | ||
121 | |||
122 | return r; | ||
123 | } | ||
124 | |||
125 | /** | 57 | /** |
126 | * struct panel_config - panel configuration | 58 | * struct panel_config - panel configuration |
127 | * @name: panel name | 59 | * @name: panel name |
@@ -150,8 +82,6 @@ struct panel_config { | |||
150 | unsigned int low; | 82 | unsigned int low; |
151 | } reset_sequence; | 83 | } reset_sequence; |
152 | 84 | ||
153 | struct panel_regulator *regulators; | ||
154 | int num_regulators; | ||
155 | }; | 85 | }; |
156 | 86 | ||
157 | enum { | 87 | enum { |
@@ -577,12 +507,6 @@ static const struct backlight_ops taal_bl_ops = { | |||
577 | .update_status = taal_bl_update_status, | 507 | .update_status = taal_bl_update_status, |
578 | }; | 508 | }; |
579 | 509 | ||
580 | static void taal_get_timings(struct omap_dss_device *dssdev, | ||
581 | struct omap_video_timings *timings) | ||
582 | { | ||
583 | *timings = dssdev->panel.timings; | ||
584 | } | ||
585 | |||
586 | static void taal_get_resolution(struct omap_dss_device *dssdev, | 510 | static void taal_get_resolution(struct omap_dss_device *dssdev, |
587 | u16 *xres, u16 *yres) | 511 | u16 *xres, u16 *yres) |
588 | { | 512 | { |
@@ -977,11 +901,6 @@ static int taal_probe(struct omap_dss_device *dssdev) | |||
977 | 901 | ||
978 | atomic_set(&td->do_update, 0); | 902 | atomic_set(&td->do_update, 0); |
979 | 903 | ||
980 | r = init_regulators(dssdev, panel_config->regulators, | ||
981 | panel_config->num_regulators); | ||
982 | if (r) | ||
983 | goto err_reg; | ||
984 | |||
985 | td->workqueue = create_singlethread_workqueue("taal_esd"); | 904 | td->workqueue = create_singlethread_workqueue("taal_esd"); |
986 | if (td->workqueue == NULL) { | 905 | if (td->workqueue == NULL) { |
987 | dev_err(&dssdev->dev, "can't create ESD workqueue\n"); | 906 | dev_err(&dssdev->dev, "can't create ESD workqueue\n"); |
@@ -1087,8 +1006,6 @@ err_bl: | |||
1087 | err_rst_gpio: | 1006 | err_rst_gpio: |
1088 | destroy_workqueue(td->workqueue); | 1007 | destroy_workqueue(td->workqueue); |
1089 | err_wq: | 1008 | err_wq: |
1090 | free_regulators(panel_config->regulators, panel_config->num_regulators); | ||
1091 | err_reg: | ||
1092 | kfree(td); | 1009 | kfree(td); |
1093 | err: | 1010 | err: |
1094 | return r; | 1011 | return r; |
@@ -1125,9 +1042,6 @@ static void __exit taal_remove(struct omap_dss_device *dssdev) | |||
1125 | /* reset, to be sure that the panel is in a valid state */ | 1042 | /* reset, to be sure that the panel is in a valid state */ |
1126 | taal_hw_reset(dssdev); | 1043 | taal_hw_reset(dssdev); |
1127 | 1044 | ||
1128 | free_regulators(td->panel_config->regulators, | ||
1129 | td->panel_config->num_regulators); | ||
1130 | |||
1131 | if (gpio_is_valid(panel_data->reset_gpio)) | 1045 | if (gpio_is_valid(panel_data->reset_gpio)) |
1132 | gpio_free(panel_data->reset_gpio); | 1046 | gpio_free(panel_data->reset_gpio); |
1133 | 1047 | ||
@@ -1909,8 +1823,6 @@ static struct omap_dss_driver taal_driver = { | |||
1909 | .run_test = taal_run_test, | 1823 | .run_test = taal_run_test, |
1910 | .memory_read = taal_memory_read, | 1824 | .memory_read = taal_memory_read, |
1911 | 1825 | ||
1912 | .get_timings = taal_get_timings, | ||
1913 | |||
1914 | .driver = { | 1826 | .driver = { |
1915 | .name = "taal", | 1827 | .name = "taal", |
1916 | .owner = THIS_MODULE, | 1828 | .owner = THIS_MODULE, |
diff --git a/drivers/video/omap2/displays/panel-tfp410.c b/drivers/video/omap2/displays/panel-tfp410.c index 52637fa8fda..bff306e041c 100644 --- a/drivers/video/omap2/displays/panel-tfp410.c +++ b/drivers/video/omap2/displays/panel-tfp410.c | |||
@@ -47,13 +47,9 @@ struct panel_drv_data { | |||
47 | struct mutex lock; | 47 | struct mutex lock; |
48 | 48 | ||
49 | int pd_gpio; | 49 | int pd_gpio; |
50 | }; | ||
51 | 50 | ||
52 | static inline struct tfp410_platform_data | 51 | struct i2c_adapter *i2c_adapter; |
53 | *get_pdata(const struct omap_dss_device *dssdev) | 52 | }; |
54 | { | ||
55 | return dssdev->data; | ||
56 | } | ||
57 | 53 | ||
58 | static int tfp410_power_on(struct omap_dss_device *dssdev) | 54 | static int tfp410_power_on(struct omap_dss_device *dssdev) |
59 | { | 55 | { |
@@ -68,7 +64,7 @@ static int tfp410_power_on(struct omap_dss_device *dssdev) | |||
68 | goto err0; | 64 | goto err0; |
69 | 65 | ||
70 | if (gpio_is_valid(ddata->pd_gpio)) | 66 | if (gpio_is_valid(ddata->pd_gpio)) |
71 | gpio_set_value(ddata->pd_gpio, 1); | 67 | gpio_set_value_cansleep(ddata->pd_gpio, 1); |
72 | 68 | ||
73 | return 0; | 69 | return 0; |
74 | err0: | 70 | err0: |
@@ -83,18 +79,18 @@ static void tfp410_power_off(struct omap_dss_device *dssdev) | |||
83 | return; | 79 | return; |
84 | 80 | ||
85 | if (gpio_is_valid(ddata->pd_gpio)) | 81 | if (gpio_is_valid(ddata->pd_gpio)) |
86 | gpio_set_value(ddata->pd_gpio, 0); | 82 | gpio_set_value_cansleep(ddata->pd_gpio, 0); |
87 | 83 | ||
88 | omapdss_dpi_display_disable(dssdev); | 84 | omapdss_dpi_display_disable(dssdev); |
89 | } | 85 | } |
90 | 86 | ||
91 | static int tfp410_probe(struct omap_dss_device *dssdev) | 87 | static int tfp410_probe(struct omap_dss_device *dssdev) |
92 | { | 88 | { |
93 | struct tfp410_platform_data *pdata = get_pdata(dssdev); | ||
94 | struct panel_drv_data *ddata; | 89 | struct panel_drv_data *ddata; |
95 | int r; | 90 | int r; |
91 | int i2c_bus_num; | ||
96 | 92 | ||
97 | ddata = kzalloc(sizeof(*ddata), GFP_KERNEL); | 93 | ddata = devm_kzalloc(&dssdev->dev, sizeof(*ddata), GFP_KERNEL); |
98 | if (!ddata) | 94 | if (!ddata) |
99 | return -ENOMEM; | 95 | return -ENOMEM; |
100 | 96 | ||
@@ -104,10 +100,15 @@ static int tfp410_probe(struct omap_dss_device *dssdev) | |||
104 | ddata->dssdev = dssdev; | 100 | ddata->dssdev = dssdev; |
105 | mutex_init(&ddata->lock); | 101 | mutex_init(&ddata->lock); |
106 | 102 | ||
107 | if (pdata) | 103 | if (dssdev->data) { |
104 | struct tfp410_platform_data *pdata = dssdev->data; | ||
105 | |||
108 | ddata->pd_gpio = pdata->power_down_gpio; | 106 | ddata->pd_gpio = pdata->power_down_gpio; |
109 | else | 107 | i2c_bus_num = pdata->i2c_bus_num; |
108 | } else { | ||
110 | ddata->pd_gpio = -1; | 109 | ddata->pd_gpio = -1; |
110 | i2c_bus_num = -1; | ||
111 | } | ||
111 | 112 | ||
112 | if (gpio_is_valid(ddata->pd_gpio)) { | 113 | if (gpio_is_valid(ddata->pd_gpio)) { |
113 | r = gpio_request_one(ddata->pd_gpio, GPIOF_OUT_INIT_LOW, | 114 | r = gpio_request_one(ddata->pd_gpio, GPIOF_OUT_INIT_LOW, |
@@ -115,13 +116,31 @@ static int tfp410_probe(struct omap_dss_device *dssdev) | |||
115 | if (r) { | 116 | if (r) { |
116 | dev_err(&dssdev->dev, "Failed to request PD GPIO %d\n", | 117 | dev_err(&dssdev->dev, "Failed to request PD GPIO %d\n", |
117 | ddata->pd_gpio); | 118 | ddata->pd_gpio); |
118 | ddata->pd_gpio = -1; | 119 | return r; |
119 | } | 120 | } |
120 | } | 121 | } |
121 | 122 | ||
123 | if (i2c_bus_num != -1) { | ||
124 | struct i2c_adapter *adapter; | ||
125 | |||
126 | adapter = i2c_get_adapter(i2c_bus_num); | ||
127 | if (!adapter) { | ||
128 | dev_err(&dssdev->dev, "Failed to get I2C adapter, bus %d\n", | ||
129 | i2c_bus_num); | ||
130 | r = -EINVAL; | ||
131 | goto err_i2c; | ||
132 | } | ||
133 | |||
134 | ddata->i2c_adapter = adapter; | ||
135 | } | ||
136 | |||
122 | dev_set_drvdata(&dssdev->dev, ddata); | 137 | dev_set_drvdata(&dssdev->dev, ddata); |
123 | 138 | ||
124 | return 0; | 139 | return 0; |
140 | err_i2c: | ||
141 | if (gpio_is_valid(ddata->pd_gpio)) | ||
142 | gpio_free(ddata->pd_gpio); | ||
143 | return r; | ||
125 | } | 144 | } |
126 | 145 | ||
127 | static void __exit tfp410_remove(struct omap_dss_device *dssdev) | 146 | static void __exit tfp410_remove(struct omap_dss_device *dssdev) |
@@ -130,14 +149,15 @@ static void __exit tfp410_remove(struct omap_dss_device *dssdev) | |||
130 | 149 | ||
131 | mutex_lock(&ddata->lock); | 150 | mutex_lock(&ddata->lock); |
132 | 151 | ||
152 | if (ddata->i2c_adapter) | ||
153 | i2c_put_adapter(ddata->i2c_adapter); | ||
154 | |||
133 | if (gpio_is_valid(ddata->pd_gpio)) | 155 | if (gpio_is_valid(ddata->pd_gpio)) |
134 | gpio_free(ddata->pd_gpio); | 156 | gpio_free(ddata->pd_gpio); |
135 | 157 | ||
136 | dev_set_drvdata(&dssdev->dev, NULL); | 158 | dev_set_drvdata(&dssdev->dev, NULL); |
137 | 159 | ||
138 | mutex_unlock(&ddata->lock); | 160 | mutex_unlock(&ddata->lock); |
139 | |||
140 | kfree(ddata); | ||
141 | } | 161 | } |
142 | 162 | ||
143 | static int tfp410_enable(struct omap_dss_device *dssdev) | 163 | static int tfp410_enable(struct omap_dss_device *dssdev) |
@@ -269,27 +289,17 @@ static int tfp410_read_edid(struct omap_dss_device *dssdev, | |||
269 | u8 *edid, int len) | 289 | u8 *edid, int len) |
270 | { | 290 | { |
271 | struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev); | 291 | struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev); |
272 | struct tfp410_platform_data *pdata = get_pdata(dssdev); | ||
273 | struct i2c_adapter *adapter; | ||
274 | int r, l, bytes_read; | 292 | int r, l, bytes_read; |
275 | 293 | ||
276 | mutex_lock(&ddata->lock); | 294 | mutex_lock(&ddata->lock); |
277 | 295 | ||
278 | if (pdata->i2c_bus_num == 0) { | 296 | if (!ddata->i2c_adapter) { |
279 | r = -ENODEV; | 297 | r = -ENODEV; |
280 | goto err; | 298 | goto err; |
281 | } | 299 | } |
282 | 300 | ||
283 | adapter = i2c_get_adapter(pdata->i2c_bus_num); | ||
284 | if (!adapter) { | ||
285 | dev_err(&dssdev->dev, "Failed to get I2C adapter, bus %d\n", | ||
286 | pdata->i2c_bus_num); | ||
287 | r = -EINVAL; | ||
288 | goto err; | ||
289 | } | ||
290 | |||
291 | l = min(EDID_LENGTH, len); | 301 | l = min(EDID_LENGTH, len); |
292 | r = tfp410_ddc_read(adapter, edid, l, 0); | 302 | r = tfp410_ddc_read(ddata->i2c_adapter, edid, l, 0); |
293 | if (r) | 303 | if (r) |
294 | goto err; | 304 | goto err; |
295 | 305 | ||
@@ -299,7 +309,7 @@ static int tfp410_read_edid(struct omap_dss_device *dssdev, | |||
299 | if (len > EDID_LENGTH && edid[0x7e] > 0) { | 309 | if (len > EDID_LENGTH && edid[0x7e] > 0) { |
300 | l = min(EDID_LENGTH, len - EDID_LENGTH); | 310 | l = min(EDID_LENGTH, len - EDID_LENGTH); |
301 | 311 | ||
302 | r = tfp410_ddc_read(adapter, edid + EDID_LENGTH, | 312 | r = tfp410_ddc_read(ddata->i2c_adapter, edid + EDID_LENGTH, |
303 | l, EDID_LENGTH); | 313 | l, EDID_LENGTH); |
304 | if (r) | 314 | if (r) |
305 | goto err; | 315 | goto err; |
@@ -319,21 +329,15 @@ err: | |||
319 | static bool tfp410_detect(struct omap_dss_device *dssdev) | 329 | static bool tfp410_detect(struct omap_dss_device *dssdev) |
320 | { | 330 | { |
321 | struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev); | 331 | struct panel_drv_data *ddata = dev_get_drvdata(&dssdev->dev); |
322 | struct tfp410_platform_data *pdata = get_pdata(dssdev); | ||
323 | struct i2c_adapter *adapter; | ||
324 | unsigned char out; | 332 | unsigned char out; |
325 | int r; | 333 | int r; |
326 | 334 | ||
327 | mutex_lock(&ddata->lock); | 335 | mutex_lock(&ddata->lock); |
328 | 336 | ||
329 | if (pdata->i2c_bus_num == 0) | 337 | if (!ddata->i2c_adapter) |
330 | goto out; | ||
331 | |||
332 | adapter = i2c_get_adapter(pdata->i2c_bus_num); | ||
333 | if (!adapter) | ||
334 | goto out; | 338 | goto out; |
335 | 339 | ||
336 | r = tfp410_ddc_read(adapter, &out, 1, 0); | 340 | r = tfp410_ddc_read(ddata->i2c_adapter, &out, 1, 0); |
337 | 341 | ||
338 | mutex_unlock(&ddata->lock); | 342 | mutex_unlock(&ddata->lock); |
339 | 343 | ||
diff --git a/drivers/video/omap2/displays/panel-tpo-td043mtea1.c b/drivers/video/omap2/displays/panel-tpo-td043mtea1.c index 32f3fcd7f0f..4b6448b3c31 100644 --- a/drivers/video/omap2/displays/panel-tpo-td043mtea1.c +++ b/drivers/video/omap2/displays/panel-tpo-td043mtea1.c | |||
@@ -272,13 +272,16 @@ static const struct omap_video_timings tpo_td043_timings = { | |||
272 | static int tpo_td043_power_on(struct tpo_td043_device *tpo_td043) | 272 | static int tpo_td043_power_on(struct tpo_td043_device *tpo_td043) |
273 | { | 273 | { |
274 | int nreset_gpio = tpo_td043->nreset_gpio; | 274 | int nreset_gpio = tpo_td043->nreset_gpio; |
275 | int r; | ||
275 | 276 | ||
276 | if (tpo_td043->powered_on) | 277 | if (tpo_td043->powered_on) |
277 | return 0; | 278 | return 0; |
278 | 279 | ||
279 | regulator_enable(tpo_td043->vcc_reg); | 280 | r = regulator_enable(tpo_td043->vcc_reg); |
281 | if (r != 0) | ||
282 | return r; | ||
280 | 283 | ||
281 | /* wait for regulator to stabilize */ | 284 | /* wait for panel to stabilize */ |
282 | msleep(160); | 285 | msleep(160); |
283 | 286 | ||
284 | if (gpio_is_valid(nreset_gpio)) | 287 | if (gpio_is_valid(nreset_gpio)) |
@@ -470,6 +473,18 @@ static void tpo_td043_remove(struct omap_dss_device *dssdev) | |||
470 | gpio_free(nreset_gpio); | 473 | gpio_free(nreset_gpio); |
471 | } | 474 | } |
472 | 475 | ||
476 | static void tpo_td043_set_timings(struct omap_dss_device *dssdev, | ||
477 | struct omap_video_timings *timings) | ||
478 | { | ||
479 | dpi_set_timings(dssdev, timings); | ||
480 | } | ||
481 | |||
482 | static int tpo_td043_check_timings(struct omap_dss_device *dssdev, | ||
483 | struct omap_video_timings *timings) | ||
484 | { | ||
485 | return dpi_check_timings(dssdev, timings); | ||
486 | } | ||
487 | |||
473 | static struct omap_dss_driver tpo_td043_driver = { | 488 | static struct omap_dss_driver tpo_td043_driver = { |
474 | .probe = tpo_td043_probe, | 489 | .probe = tpo_td043_probe, |
475 | .remove = tpo_td043_remove, | 490 | .remove = tpo_td043_remove, |
@@ -481,6 +496,9 @@ static struct omap_dss_driver tpo_td043_driver = { | |||
481 | .set_mirror = tpo_td043_set_hmirror, | 496 | .set_mirror = tpo_td043_set_hmirror, |
482 | .get_mirror = tpo_td043_get_hmirror, | 497 | .get_mirror = tpo_td043_get_hmirror, |
483 | 498 | ||
499 | .set_timings = tpo_td043_set_timings, | ||
500 | .check_timings = tpo_td043_check_timings, | ||
501 | |||
484 | .driver = { | 502 | .driver = { |
485 | .name = "tpo_td043mtea1_panel", | 503 | .name = "tpo_td043mtea1_panel", |
486 | .owner = THIS_MODULE, | 504 | .owner = THIS_MODULE, |