OMAPDSS: SDI: fix regulators for DT
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 19 Mar 2013 11:46:40 +0000 (13:46 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 17 Jun 2013 11:00:47 +0000 (14:00 +0300)
SDI requires a regulator to operate. This regulator is, for some reason,
currently attached to the virtual omapdss device, instead of the SDI
device. This does not work for DT, as the regulator mappings need to be
described in the DT data, and the virtual omapdss device is not present
there.

Fix the issue by acquiring the regulator in the SDI device. To retain
compatibility with the current board files, the old method of getting
the regulator is kept. The old method can be removed when the board
files have been changed to pass the regulator to SDI.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/omap2/dss/sdi.c

index d362fe17081f42e20dd66c440f9460d99bd3482d..89e53ebe36e909daf692bda5416c9f261ac92035 100644 (file)
@@ -31,6 +31,8 @@
 #include "dss.h"
 
 static struct {
+       struct platform_device *pdev;
+
        bool update_enabled;
        struct regulator *vdds_sdi_reg;
 
@@ -258,8 +260,11 @@ static int sdi_init_regulator(void)
        vdds_sdi = dss_get_vdds_sdi();
 
        if (IS_ERR(vdds_sdi)) {
-               DSSERR("can't get VDDS_SDI regulator\n");
-               return PTR_ERR(vdds_sdi);
+               vdds_sdi = devm_regulator_get(&sdi.pdev->dev, "vdds_sdi");
+               if (IS_ERR(vdds_sdi)) {
+                       DSSERR("can't get VDDS_SDI regulator\n");
+                       return PTR_ERR(vdds_sdi);
+               }
        }
 
        sdi.vdds_sdi_reg = vdds_sdi;
@@ -362,6 +367,8 @@ static int omap_sdi_probe(struct platform_device *pdev)
 {
        int r;
 
+       sdi.pdev = pdev;
+
        sdi_init_output(pdev);
 
        if (pdev->dev.platform_data) {