]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/mfd/arizona-core.c
mfd: arizona: Unconditionally enable 32kHz clock
[karo-tx-linux.git] / drivers / mfd / arizona-core.c
index dd679e8601daf5d254a0a692406c441b6e0b98ff..1eb963c5cd227d660267943be2d6f4bf7cc5329b 100644 (file)
@@ -39,11 +39,21 @@ int arizona_clk32k_enable(struct arizona *arizona)
 
        arizona->clk32k_ref++;
 
-       if (arizona->clk32k_ref == 1)
+       if (arizona->clk32k_ref == 1) {
+               switch (arizona->pdata.clk32k_src) {
+               case ARIZONA_32KZ_MCLK1:
+                       ret = pm_runtime_get_sync(arizona->dev);
+                       if (ret != 0)
+                               goto out;
+                       break;
+               }
+
                ret = regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
                                         ARIZONA_CLK_32K_ENA,
                                         ARIZONA_CLK_32K_ENA);
+       }
 
+out:
        if (ret != 0)
                arizona->clk32k_ref--;
 
@@ -63,10 +73,17 @@ int arizona_clk32k_disable(struct arizona *arizona)
 
        arizona->clk32k_ref--;
 
-       if (arizona->clk32k_ref == 0)
+       if (arizona->clk32k_ref == 0) {
                regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
                                   ARIZONA_CLK_32K_ENA, 0);
 
+               switch (arizona->pdata.clk32k_src) {
+               case ARIZONA_32KZ_MCLK1:
+                       pm_runtime_put_sync(arizona->dev);
+                       break;
+               }
+       }
+
        mutex_unlock(&arizona->clk_lock);
 
        return ret;
@@ -501,6 +518,7 @@ int arizona_dev_init(struct arizona *arizona)
                regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,
                                   ARIZONA_CLK_32K_SRC_MASK,
                                   arizona->pdata.clk32k_src - 1);
+               arizona_clk32k_enable(arizona);
                break;
        case ARIZONA_32KZ_NONE:
                regmap_update_bits(arizona->regmap, ARIZONA_CLOCK_32K_1,