]> Pileus Git - ~andy/linux/blobdiff - drivers/regulator/pcap-regulator.c
Merge tag 'irqdomain-for-linus' of git://git.secretlab.ca/git/linux-2.6
[~andy/linux] / drivers / regulator / pcap-regulator.c
index c434e5f5f8a24337d82729c539ffe856a9f3bcf0..8211101121f0c6a07b68184db5bb95bbd53d7e73 100644 (file)
@@ -150,57 +150,33 @@ static struct pcap_regulator vreg_table[] = {
        VREG_INFO(SW2S,  PCAP_REG_LOWPWR,  NA, 20, NA, NA), */
 };
 
-static int pcap_regulator_set_voltage(struct regulator_dev *rdev,
-                                     int min_uV, int max_uV,
-                                     unsigned *selector)
+static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev,
+                                         unsigned selector)
 {
        struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
        void *pcap = rdev_get_drvdata(rdev);
-       int uV;
-       u8 i;
 
        /* the regulator doesn't support voltage switching */
        if (vreg->n_voltages == 1)
                return -EINVAL;
 
-       for (i = 0; i < vreg->n_voltages; i++) {
-               /* For V1 the first is not the best match */
-               if (i == 0 && rdev_get_id(rdev) == V1)
-                       i = 1;
-               else if (i + 1 == vreg->n_voltages && rdev_get_id(rdev) == V1)
-                       i = 0;
-
-               uV = vreg->voltage_table[i] * 1000;
-               if (min_uV <= uV && uV <= max_uV) {
-                       *selector = i;
-                       return ezx_pcap_set_bits(pcap, vreg->reg,
-                                       (vreg->n_voltages - 1) << vreg->index,
-                                       i << vreg->index);
-               }
-
-               if (i == 0 && rdev_get_id(rdev) == V1)
-                       i = vreg->n_voltages - 1;
-       }
-
-       /* the requested voltage range is not supported by this regulator */
-       return -EINVAL;
+       return ezx_pcap_set_bits(pcap, vreg->reg,
+                                (vreg->n_voltages - 1) << vreg->index,
+                                selector << vreg->index);
 }
 
-static int pcap_regulator_get_voltage(struct regulator_dev *rdev)
+static int pcap_regulator_get_voltage_sel(struct regulator_dev *rdev)
 {
        struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
        void *pcap = rdev_get_drvdata(rdev);
        u32 tmp;
-       int mV;
 
        if (vreg->n_voltages == 1)
-               return vreg->voltage_table[0] * 1000;
+               return 0;
 
        ezx_pcap_read(pcap, vreg->reg, &tmp);
        tmp = ((tmp >> vreg->index) & (vreg->n_voltages - 1));
-       mV = vreg->voltage_table[tmp];
-
-       return mV * 1000;
+       return tmp;
 }
 
 static int pcap_regulator_enable(struct regulator_dev *rdev)
@@ -248,8 +224,8 @@ static int pcap_regulator_list_voltage(struct regulator_dev *rdev,
 
 static struct regulator_ops pcap_regulator_ops = {
        .list_voltage   = pcap_regulator_list_voltage,
-       .set_voltage    = pcap_regulator_set_voltage,
-       .get_voltage    = pcap_regulator_get_voltage,
+       .set_voltage_sel = pcap_regulator_set_voltage_sel,
+       .get_voltage_sel = pcap_regulator_get_voltage_sel,
        .enable         = pcap_regulator_enable,
        .disable        = pcap_regulator_disable,
        .is_enabled     = pcap_regulator_is_enabled,
@@ -275,9 +251,13 @@ static int __devinit pcap_regulator_probe(struct platform_device *pdev)
 {
        struct regulator_dev *rdev;
        void *pcap = dev_get_drvdata(pdev->dev.parent);
+       struct regulator_config config = { };
+
+       config.dev = &pdev->dev;
+       config.init_data = pdev->dev.platform_data;
+       config.driver_data = pcap;
 
-       rdev = regulator_register(&pcap_regulators[pdev->id], &pdev->dev,
-                               pdev->dev.platform_data, pcap, NULL);
+       rdev = regulator_register(&pcap_regulators[pdev->id], &config);
        if (IS_ERR(rdev))
                return PTR_ERR(rdev);