Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile
[cascardo/linux.git] / drivers / mfd / sec-core.c
index 1cf2752..be06d0a 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/mfd/core.h>
 #include <linux/mfd/samsung/core.h>
 #include <linux/mfd/samsung/irq.h>
-#include <linux/mfd/samsung/rtc.h>
 #include <linux/mfd/samsung/s2mpa01.h>
 #include <linux/mfd/samsung/s2mps11.h>
 #include <linux/mfd/samsung/s2mps14.h>
@@ -91,7 +90,7 @@ static const struct mfd_cell s2mpa01_devs[] = {
 };
 
 #ifdef CONFIG_OF
-static struct of_device_id sec_dt_match[] = {
+static const struct of_device_id sec_dt_match[] = {
        {       .compatible = "samsung,s5m8767-pmic",
                .data = (void *)S5M8767X,
        }, {
@@ -196,20 +195,6 @@ static const struct regmap_config s5m8767_regmap_config = {
        .cache_type = REGCACHE_FLAT,
 };
 
-static const struct regmap_config s5m_rtc_regmap_config = {
-       .reg_bits = 8,
-       .val_bits = 8,
-
-       .max_register = SEC_RTC_REG_MAX,
-};
-
-static const struct regmap_config s2mps14_rtc_regmap_config = {
-       .reg_bits = 8,
-       .val_bits = 8,
-
-       .max_register = S2MPS_RTC_REG_MAX,
-};
-
 #ifdef CONFIG_OF
 /*
  * Only the common platform data elements for s5m8767 are parsed here from the
@@ -264,8 +249,9 @@ static int sec_pmic_probe(struct i2c_client *i2c,
                            const struct i2c_device_id *id)
 {
        struct sec_platform_data *pdata = dev_get_platdata(&i2c->dev);
-       const struct regmap_config *regmap, *regmap_rtc;
+       const struct regmap_config *regmap;
        struct sec_pmic_dev *sec_pmic;
+       unsigned long device_type;
        int ret;
 
        sec_pmic = devm_kzalloc(&i2c->dev, sizeof(struct sec_pmic_dev),
@@ -277,7 +263,7 @@ static int sec_pmic_probe(struct i2c_client *i2c,
        sec_pmic->dev = &i2c->dev;
        sec_pmic->i2c = i2c;
        sec_pmic->irq = i2c->irq;
-       sec_pmic->type = sec_i2c_get_driver_data(i2c, id);
+       device_type = sec_i2c_get_driver_data(i2c, id);
 
        if (sec_pmic->dev->of_node) {
                pdata = sec_pmic_i2c_parse_dt_pdata(sec_pmic->dev);
@@ -285,7 +271,7 @@ static int sec_pmic_probe(struct i2c_client *i2c,
                        ret = PTR_ERR(pdata);
                        return ret;
                }
-               pdata->device_type = sec_pmic->type;
+               pdata->device_type = device_type;
        }
        if (pdata) {
                sec_pmic->device_type = pdata->device_type;
@@ -298,39 +284,21 @@ static int sec_pmic_probe(struct i2c_client *i2c,
        switch (sec_pmic->device_type) {
        case S2MPA01:
                regmap = &s2mpa01_regmap_config;
-               /*
-                * The rtc-s5m driver does not support S2MPA01 and there
-                * is no mfd_cell for S2MPA01 RTC device.
-                * However we must pass something to devm_regmap_init_i2c()
-                * so use S5M-like regmap config even though it wouldn't work.
-                */
-               regmap_rtc = &s5m_rtc_regmap_config;
                break;
        case S2MPS11X:
                regmap = &s2mps11_regmap_config;
-               /*
-                * The rtc-s5m driver does not support S2MPS11 and there
-                * is no mfd_cell for S2MPS11 RTC device.
-                * However we must pass something to devm_regmap_init_i2c()
-                * so use S5M-like regmap config even though it wouldn't work.
-                */
-               regmap_rtc = &s5m_rtc_regmap_config;
                break;
        case S2MPS14X:
                regmap = &s2mps14_regmap_config;
-               regmap_rtc = &s2mps14_rtc_regmap_config;
                break;
        case S5M8763X:
                regmap = &s5m8763_regmap_config;
-               regmap_rtc = &s5m_rtc_regmap_config;
                break;
        case S5M8767X:
                regmap = &s5m8767_regmap_config;
-               regmap_rtc = &s5m_rtc_regmap_config;
                break;
        default:
                regmap = &sec_regmap_config;
-               regmap_rtc = &s5m_rtc_regmap_config;
                break;
        }
 
@@ -342,21 +310,6 @@ static int sec_pmic_probe(struct i2c_client *i2c,
                return ret;
        }
 
-       sec_pmic->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR);
-       if (!sec_pmic->rtc) {
-               dev_err(&i2c->dev, "Failed to allocate I2C for RTC\n");
-               return -ENODEV;
-       }
-       i2c_set_clientdata(sec_pmic->rtc, sec_pmic);
-
-       sec_pmic->regmap_rtc = devm_regmap_init_i2c(sec_pmic->rtc, regmap_rtc);
-       if (IS_ERR(sec_pmic->regmap_rtc)) {
-               ret = PTR_ERR(sec_pmic->regmap_rtc);
-               dev_err(&i2c->dev, "Failed to allocate RTC register map: %d\n",
-                       ret);
-               goto err_regmap_rtc;
-       }
-
        if (pdata && pdata->cfg_pmic_irq)
                pdata->cfg_pmic_irq();
 
@@ -403,8 +356,6 @@ static int sec_pmic_probe(struct i2c_client *i2c,
 
 err_mfd:
        sec_irq_exit(sec_pmic);
-err_regmap_rtc:
-       i2c_unregister_device(sec_pmic->rtc);
        return ret;
 }
 
@@ -414,7 +365,6 @@ static int sec_pmic_remove(struct i2c_client *i2c)
 
        mfd_remove_devices(sec_pmic->dev);
        sec_irq_exit(sec_pmic);
-       i2c_unregister_device(sec_pmic->rtc);
        return 0;
 }
 
@@ -424,19 +374,18 @@ static int sec_pmic_suspend(struct device *dev)
        struct i2c_client *i2c = container_of(dev, struct i2c_client, dev);
        struct sec_pmic_dev *sec_pmic = i2c_get_clientdata(i2c);
 
-       if (device_may_wakeup(dev)) {
+       if (device_may_wakeup(dev))
                enable_irq_wake(sec_pmic->irq);
-               /*
-                * PMIC IRQ must be disabled during suspend for RTC alarm
-                * to work properly.
-                * When device is woken up from suspend by RTC Alarm, an
-                * interrupt occurs before resuming I2C bus controller.
-                * The interrupt is handled by regmap_irq_thread which tries
-                * to read RTC registers. This read fails (I2C is still
-                * suspended) and RTC Alarm interrupt is disabled.
-                */
-               disable_irq(sec_pmic->irq);
-       }
+       /*
+        * PMIC IRQ must be disabled during suspend for RTC alarm
+        * to work properly.
+        * When device is woken up from suspend, an
+        * interrupt occurs before resuming I2C bus controller.
+        * The interrupt is handled by regmap_irq_thread which tries
+        * to read RTC registers. This read fails (I2C is still
+        * suspended) and RTC Alarm interrupt is disabled.
+        */
+       disable_irq(sec_pmic->irq);
 
        return 0;
 }
@@ -446,10 +395,9 @@ static int sec_pmic_resume(struct device *dev)
        struct i2c_client *i2c = container_of(dev, struct i2c_client, dev);
        struct sec_pmic_dev *sec_pmic = i2c_get_clientdata(i2c);
 
-       if (device_may_wakeup(dev)) {
+       if (device_may_wakeup(dev))
                disable_irq_wake(sec_pmic->irq);
-               enable_irq(sec_pmic->irq);
-       }
+       enable_irq(sec_pmic->irq);
 
        return 0;
 }