MFD: twl6040: Fix power on GPIO handling
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Thu, 15 Sep 2011 12:39:26 +0000 (15:39 +0300)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 19 Sep 2011 22:15:48 +0000 (23:15 +0100)
Avoid requesting the audpwron gpio in case of ES1.0
revision.
In the past we requested the gpio, but we did not
free it up, since we made the check for the revision
later. This results later checks for gpio validity to
fail, leaving the gpio reserved (even after the driver
has been removed).

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
Acked-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/mfd/twl6040-core.c

index 51c3b47be655550f4b7e543e1fb01b0c69f2f72c..7dc8c47150017ba64c515038258c6fe02e098b36 100644 (file)
@@ -470,7 +470,6 @@ static int __devinit twl6040_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, twl6040);
 
        twl6040->dev = &pdev->dev;
-       twl6040->audpwron = pdata->audpwron_gpio;
        twl6040->irq = pdata->naudint_irq;
        twl6040->irq_base = pdata->irq_base;
 
@@ -480,6 +479,12 @@ static int __devinit twl6040_probe(struct platform_device *pdev)
 
        twl6040->rev = twl6040_reg_read(twl6040, TWL6040_REG_ASICREV);
 
+       /* ERRATA: Automatic power-up is not possible in ES1.0 */
+       if (twl6040_get_revid(twl6040) > TWL6040_REV_ES1_0)
+               twl6040->audpwron = pdata->audpwron_gpio;
+       else
+               twl6040->audpwron = -EINVAL;
+
        if (gpio_is_valid(twl6040->audpwron)) {
                ret = gpio_request(twl6040->audpwron, "audpwron");
                if (ret)
@@ -490,10 +495,6 @@ static int __devinit twl6040_probe(struct platform_device *pdev)
                        goto gpio2_err;
        }
 
-       /* ERRATA: Automatic power-up is not possible in ES1.0 */
-       if (twl6040_get_revid(twl6040) == TWL6040_REV_ES1_0)
-               twl6040->audpwron = -EINVAL;
-
        /* codec interrupt */
        ret = twl6040_irq_init(twl6040);
        if (ret)