s390: update defconfigs
[linux-2.6-microblaze.git] / drivers / rtc / rtc-ds1307.c
index 9f5f54c..183cf7c 100644 (file)
@@ -8,12 +8,12 @@
  *  Copyright (C) 2012 Bertrand Achard (nvram access fixes)
  */
 
-#include <linux/acpi.h>
 #include <linux/bcd.h>
 #include <linux/i2c.h>
 #include <linux/init.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/property.h>
 #include <linux/rtc/ds1307.h>
 #include <linux/rtc.h>
 #include <linux/slab.h>
@@ -31,6 +31,7 @@
  * That's a natural job for a factory or repair bench.
  */
 enum ds_type {
+       unknown_ds_type, /* always first and 0 */
        ds_1307,
        ds_1308,
        ds_1337,
@@ -1090,7 +1091,6 @@ static const struct i2c_device_id ds1307_id[] = {
 };
 MODULE_DEVICE_TABLE(i2c, ds1307_id);
 
-#ifdef CONFIG_OF
 static const struct of_device_id ds1307_of_match[] = {
        {
                .compatible = "dallas,ds1307",
@@ -1167,32 +1167,6 @@ static const struct of_device_id ds1307_of_match[] = {
        { }
 };
 MODULE_DEVICE_TABLE(of, ds1307_of_match);
-#endif
-
-#ifdef CONFIG_ACPI
-static const struct acpi_device_id ds1307_acpi_ids[] = {
-       { .id = "DS1307", .driver_data = ds_1307 },
-       { .id = "DS1308", .driver_data = ds_1308 },
-       { .id = "DS1337", .driver_data = ds_1337 },
-       { .id = "DS1338", .driver_data = ds_1338 },
-       { .id = "DS1339", .driver_data = ds_1339 },
-       { .id = "DS1388", .driver_data = ds_1388 },
-       { .id = "DS1340", .driver_data = ds_1340 },
-       { .id = "DS1341", .driver_data = ds_1341 },
-       { .id = "DS3231", .driver_data = ds_3231 },
-       { .id = "M41T0", .driver_data = m41t0 },
-       { .id = "M41T00", .driver_data = m41t00 },
-       { .id = "M41T11", .driver_data = m41t11 },
-       { .id = "MCP7940X", .driver_data = mcp794xx },
-       { .id = "MCP7941X", .driver_data = mcp794xx },
-       { .id = "PT7C4338", .driver_data = ds_1307 },
-       { .id = "RX8025", .driver_data = rx_8025 },
-       { .id = "ISL12057", .driver_data = ds_1337 },
-       { .id = "RX8130", .driver_data = rx_8130 },
-       { }
-};
-MODULE_DEVICE_TABLE(acpi, ds1307_acpi_ids);
-#endif
 
 /*
  * The ds1337 and ds1339 both have two alarms, but we only use the first
@@ -1626,13 +1600,16 @@ static const struct clk_ops ds3231_clk_32khz_ops = {
        .recalc_rate = ds3231_clk_32khz_recalc_rate,
 };
 
+static const char *ds3231_clks_names[] = {
+       [DS3231_CLK_SQW] = "ds3231_clk_sqw",
+       [DS3231_CLK_32KHZ] = "ds3231_clk_32khz",
+};
+
 static struct clk_init_data ds3231_clks_init[] = {
        [DS3231_CLK_SQW] = {
-               .name = "ds3231_clk_sqw",
                .ops = &ds3231_clk_sqw_ops,
        },
        [DS3231_CLK_32KHZ] = {
-               .name = "ds3231_clk_32khz",
                .ops = &ds3231_clk_32khz_ops,
        },
 };
@@ -1653,6 +1630,11 @@ static int ds3231_clks_register(struct ds1307 *ds1307)
        if (!onecell->clks)
                return -ENOMEM;
 
+       /* optional override of the clockname */
+       device_property_read_string_array(ds1307->dev, "clock-output-names",
+                                         ds3231_clks_names,
+                                         ARRAY_SIZE(ds3231_clks_names));
+
        for (i = 0; i < ARRAY_SIZE(ds3231_clks_init); i++) {
                struct clk_init_data init = ds3231_clks_init[i];
 
@@ -1663,9 +1645,7 @@ static int ds3231_clks_register(struct ds1307 *ds1307)
                if (i == DS3231_CLK_SQW && test_bit(HAS_ALARM, &ds1307->flags))
                        continue;
 
-               /* optional override of the clockname */
-               of_property_read_string_index(node, "clock-output-names", i,
-                                             &init.name);
+               init.name = ds3231_clks_names[i];
                ds1307->clks[i].init = &init;
 
                onecell->clks[i] = devm_clk_register(ds1307->dev,
@@ -1674,10 +1654,8 @@ static int ds3231_clks_register(struct ds1307 *ds1307)
                        return PTR_ERR(onecell->clks[i]);
        }
 
-       if (!node)
-               return 0;
-
-       of_clk_add_provider(node, of_clk_src_onecell_get, onecell);
+       if (node)
+               of_clk_add_provider(node, of_clk_src_onecell_get, onecell);
 
        return 0;
 }
@@ -1761,6 +1739,7 @@ static int ds1307_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
 {
        struct ds1307           *ds1307;
+       const void              *match;
        int                     err = -ENODEV;
        int                     tmp;
        const struct chip_desc  *chip;
@@ -1786,22 +1765,15 @@ static int ds1307_probe(struct i2c_client *client,
 
        i2c_set_clientdata(client, ds1307);
 
-       if (client->dev.of_node) {
-               ds1307->type = (enum ds_type)
-                       of_device_get_match_data(&client->dev);
+       match = device_get_match_data(&client->dev);
+       if (match) {
+               ds1307->type = (enum ds_type)match;
                chip = &chips[ds1307->type];
        } else if (id) {
                chip = &chips[id->driver_data];
                ds1307->type = id->driver_data;
        } else {
-               const struct acpi_device_id *acpi_id;
-
-               acpi_id = acpi_match_device(ACPI_PTR(ds1307_acpi_ids),
-                                           ds1307->dev);
-               if (!acpi_id)
-                       return -ENODEV;
-               chip = &chips[acpi_id->driver_data];
-               ds1307->type = acpi_id->driver_data;
+               return -ENODEV;
        }
 
        want_irq = client->irq > 0 && chip->alarm;
@@ -1819,7 +1791,6 @@ static int ds1307_probe(struct i2c_client *client,
                             trickle_charger_setup);
        }
 
-#ifdef CONFIG_OF
 /*
  * For devices with no IRQ directly connected to the SoC, the RTC chip
  * can be forced as a wakeup source by stating that explicitly in
@@ -1828,10 +1799,8 @@ static int ds1307_probe(struct i2c_client *client,
  * This will guarantee the 'wakealarm' sysfs entry is available on the device,
  * if supported by the RTC.
  */
-       if (chip->alarm && of_property_read_bool(client->dev.of_node,
-                                                "wakeup-source"))
+       if (chip->alarm && device_property_read_bool(&client->dev, "wakeup-source"))
                ds1307_can_wakeup_device = true;
-#endif
 
        switch (ds1307->type) {
        case ds_1337:
@@ -2032,7 +2001,7 @@ static int ds1307_probe(struct i2c_client *client,
        if (err)
                return err;
 
-       err = rtc_register_device(ds1307->rtc);
+       err = devm_rtc_register_device(ds1307->rtc);
        if (err)
                return err;
 
@@ -2047,8 +2016,7 @@ static int ds1307_probe(struct i2c_client *client,
                        .priv = ds1307,
                };
 
-               ds1307->rtc->nvram_old_abi = true;
-               rtc_nvmem_register(ds1307->rtc, &nvmem_cfg);
+               devm_rtc_nvmem_register(ds1307->rtc, &nvmem_cfg);
        }
 
        ds1307_hwmon_register(ds1307);
@@ -2064,8 +2032,7 @@ exit:
 static struct i2c_driver ds1307_driver = {
        .driver = {
                .name   = "rtc-ds1307",
-               .of_match_table = of_match_ptr(ds1307_of_match),
-               .acpi_match_table = ACPI_PTR(ds1307_acpi_ids),
+               .of_match_table = ds1307_of_match,
        },
        .probe          = ds1307_probe,
        .id_table       = ds1307_id,