@@ -970,8 +970,8 @@ static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307,
return setup;
}
-static u8 ds1307_trickle_init(struct ds1307 *ds1307,
- const struct chip_desc *chip)
+static u8 ds1307_trickle_setup(struct ds1307 *ds1307,
+ const struct chip_desc *chip)
{
uint32_t ohms;
bool diode = true;
@@ -1344,6 +1344,30 @@ static enum ds_type ds1307_get_type(struct device *dev,
return acpi_id ? acpi_id->driver_data : -ENODEV;
}
+static void ds1307_trickle_init(struct ds1307 *ds1307)
+{
+ struct ds1307_platform_data *pdata = dev_get_platdata(ds1307->dev);
+ const struct chip_desc *chip = &chips[ds1307->type];
+ u8 trickle_charger_setup;
+
+ if (!chip->trickle_charger_reg)
+ return;
+
+ if (pdata)
+ trickle_charger_setup = pdata->trickle_charger_setup;
+ else
+ trickle_charger_setup = ds1307_trickle_setup(ds1307, chip);
+
+ if (trickle_charger_setup) {
+ trickle_charger_setup |= DS13XX_TRICKLE_CHARGER_MAGIC;
+ dev_dbg(ds1307->dev,
+ "writing trickle charger info 0x%x to 0x%x\n",
+ trickle_charger_setup, chip->trickle_charger_reg);
+ regmap_write(ds1307->regmap, chip->trickle_charger_reg,
+ trickle_charger_setup);
+ }
+}
+
static const struct regmap_config regmap_config = {
.reg_bits = 8,
.val_bits = 8,
@@ -1359,10 +1383,8 @@ static int ds1307_probe(struct i2c_client *client,
bool want_irq;
bool ds1307_can_wakeup_device = false;
unsigned char *buf;
- struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev);
struct rtc_time tm;
unsigned long timestamp;
- u8 trickle_charger_setup = 0;
ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL);
if (!ds1307)
@@ -1385,25 +1407,11 @@ static int ds1307_probe(struct i2c_client *client,
return ds1307->type;
chip = &chips[ds1307->type];
-
want_irq = client->irq > 0 && chip->alarm;
-
- if (!pdata)
- trickle_charger_setup = ds1307_trickle_init(ds1307, chip);
- else if (pdata->trickle_charger_setup)
- trickle_charger_setup = pdata->trickle_charger_setup;
-
- if (trickle_charger_setup && chip->trickle_charger_reg) {
- trickle_charger_setup |= DS13XX_TRICKLE_CHARGER_MAGIC;
- dev_dbg(ds1307->dev,
- "writing trickle charger info 0x%x to 0x%x\n",
- trickle_charger_setup, chip->trickle_charger_reg);
- regmap_write(ds1307->regmap, chip->trickle_charger_reg,
- trickle_charger_setup);
- }
-
buf = ds1307->regs;
+ ds1307_trickle_init(ds1307);
+
#ifdef CONFIG_OF
/*
* For devices with no IRQ directly connected to the SoC, the RTC chip
Rename the existing function ds1307_trickle_init to ds1307_trickle_setup and factor out trickle charger initialization from ds1307_probe into a new function ds1307_trickle_init. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- drivers/rtc/rtc-ds1307.c | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-)