Merge tag 'rtc-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux

Pull RTC updates from Alexandre Belloni:
"A great rework of the isl12022 driver makes up the bulk of the
changes. There is also an important fix for CMOS and then the usual
small fixes:

- switch to devm_clk_get_enabled() where relevant

- cmos: event handler registration fix

- isl12022: code improvements"

* tag 'rtc-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux:
rtc: rv3028: Fix codestyle errors
rtc: cmos: Fix event handler registration ordering issue
rtc: k3: Use devm_clk_get_enabled() helper
rtc: jz4740: Use devm_clk_get_enabled() helper
rtc: mpfs: Use devm_clk_get_enabled() helper
rtc: ds1685: Fix spelling of function name in comment block
rtc: isl12022: switch to using regmap API
rtc: isl12022: drop redundant write to HR register
rtc: isl12022: use dev_set_drvdata() instead of i2c_set_clientdata()
rtc: isl12022: use %ptR
rtc: isl12022: simplify some expressions
rtc: isl12022: drop a dev_info()
rtc: isl12022: specify range_min and range_max
rtc: isl12022: stop using deprecated devm_rtc_device_register()
rtc: stmp3xxx: Add failure handling for stmp3xxx_wdt_register()
rtc: mxc: Use devm_clk_get_enabled() helper
rtc: gamecube: Always reset HW_SRNPROT after read
rtc: k3: detect SoC to determine erratum fix
rtc: k3: wait until the unlock field is not zero
rtc: mpfs: Remove printing of stray CR

+97 -246
+1
drivers/rtc/Kconfig
··· 423 424 config RTC_DRV_ISL12022 425 tristate "Intersil ISL12022" 426 help 427 If you say yes here you get support for the 428 Intersil ISL12022 RTC chip.
··· 423 424 config RTC_DRV_ISL12022 425 tristate "Intersil ISL12022" 426 + select REGMAP_I2C 427 help 428 If you say yes here you get support for the 429 Intersil ISL12022 RTC chip.
+19 -10
drivers/rtc/rtc-cmos.c
··· 1352 1353 static int cmos_pnp_probe(struct pnp_dev *pnp, const struct pnp_device_id *id) 1354 { 1355 - cmos_wake_setup(&pnp->dev); 1356 1357 if (pnp_port_start(pnp, 0) == 0x70 && !pnp_irq_valid(pnp, 0)) { 1358 - unsigned int irq = 0; 1359 #ifdef CONFIG_X86 1360 /* Some machines contain a PNP entry for the RTC, but 1361 * don't define the IRQ. It should always be safe to ··· 1364 if (nr_legacy_irqs()) 1365 irq = RTC_IRQ; 1366 #endif 1367 - return cmos_do_probe(&pnp->dev, 1368 - pnp_get_resource(pnp, IORESOURCE_IO, 0), irq); 1369 } else { 1370 - return cmos_do_probe(&pnp->dev, 1371 - pnp_get_resource(pnp, IORESOURCE_IO, 0), 1372 - pnp_irq(pnp, 0)); 1373 } 1374 } 1375 1376 static void cmos_pnp_remove(struct pnp_dev *pnp) ··· 1458 static int __init cmos_platform_probe(struct platform_device *pdev) 1459 { 1460 struct resource *resource; 1461 - int irq; 1462 1463 cmos_of_init(pdev); 1464 - cmos_wake_setup(&pdev->dev); 1465 1466 if (RTC_IOMAPPED) 1467 resource = platform_get_resource(pdev, IORESOURCE_IO, 0); ··· 1470 if (irq < 0) 1471 irq = -1; 1472 1473 - return cmos_do_probe(&pdev->dev, resource, irq); 1474 } 1475 1476 static int cmos_platform_remove(struct platform_device *pdev)
··· 1352 1353 static int cmos_pnp_probe(struct pnp_dev *pnp, const struct pnp_device_id *id) 1354 { 1355 + int irq, ret; 1356 1357 if (pnp_port_start(pnp, 0) == 0x70 && !pnp_irq_valid(pnp, 0)) { 1358 + irq = 0; 1359 #ifdef CONFIG_X86 1360 /* Some machines contain a PNP entry for the RTC, but 1361 * don't define the IRQ. It should always be safe to ··· 1364 if (nr_legacy_irqs()) 1365 irq = RTC_IRQ; 1366 #endif 1367 } else { 1368 + irq = pnp_irq(pnp, 0); 1369 } 1370 + 1371 + ret = cmos_do_probe(&pnp->dev, pnp_get_resource(pnp, IORESOURCE_IO, 0), irq); 1372 + if (ret) 1373 + return ret; 1374 + 1375 + cmos_wake_setup(&pnp->dev); 1376 + 1377 + return 0; 1378 } 1379 1380 static void cmos_pnp_remove(struct pnp_dev *pnp) ··· 1454 static int __init cmos_platform_probe(struct platform_device *pdev) 1455 { 1456 struct resource *resource; 1457 + int irq, ret; 1458 1459 cmos_of_init(pdev); 1460 1461 if (RTC_IOMAPPED) 1462 resource = platform_get_resource(pdev, IORESOURCE_IO, 0); ··· 1467 if (irq < 0) 1468 irq = -1; 1469 1470 + ret = cmos_do_probe(&pdev->dev, resource, irq); 1471 + if (ret) 1472 + return ret; 1473 + 1474 + cmos_wake_setup(&pdev->dev); 1475 + 1476 + return 0; 1477 } 1478 1479 static int cmos_platform_remove(struct platform_device *pdev)
+1 -1
drivers/rtc/rtc-ds1685.c
··· 132 } 133 134 /** 135 - * s1685_rtc_check_mday - check validity of the day of month. 136 * @rtc: pointer to the ds1685 rtc structure. 137 * @mday: day of month. 138 *
··· 132 } 133 134 /** 135 + * ds1685_rtc_check_mday - check validity of the day of month. 136 * @rtc: pointer to the ds1685 rtc structure. 137 * @mday: day of month. 138 *
+5 -6
drivers/rtc/rtc-gamecube.c
··· 265 * SRAM address as on previous consoles. 266 */ 267 ret = regmap_read(d->regmap, RTC_SRAM_BIAS, &d->rtc_bias); 268 - if (ret) { 269 - pr_err("failed to get the RTC bias\n"); 270 - iounmap(hw_srnprot); 271 - return -1; 272 - } 273 274 /* Reset SRAM access to how it was before, our job here is done. */ 275 if (old != 0x7bf) 276 iowrite32be(old, hw_srnprot); 277 iounmap(hw_srnprot); 278 279 - return 0; 280 } 281 282 static const struct regmap_range rtc_rd_ranges[] = {
··· 265 * SRAM address as on previous consoles. 266 */ 267 ret = regmap_read(d->regmap, RTC_SRAM_BIAS, &d->rtc_bias); 268 269 /* Reset SRAM access to how it was before, our job here is done. */ 270 if (old != 0x7bf) 271 iowrite32be(old, hw_srnprot); 272 + 273 iounmap(hw_srnprot); 274 275 + if (ret) 276 + pr_err("failed to get the RTC bias\n"); 277 + 278 + return ret; 279 } 280 281 static const struct regmap_range rtc_rd_ranges[] = {
+39 -120
drivers/rtc/rtc-isl12022.c
··· 16 #include <linux/err.h> 17 #include <linux/of.h> 18 #include <linux/of_device.h> 19 20 /* ISL register offsets */ 21 #define ISL12022_REG_SC 0x00 ··· 43 44 struct isl12022 { 45 struct rtc_device *rtc; 46 - 47 - bool write_enabled; /* true if write enable is set */ 48 }; 49 - 50 - 51 - static int isl12022_read_regs(struct i2c_client *client, uint8_t reg, 52 - uint8_t *data, size_t n) 53 - { 54 - struct i2c_msg msgs[] = { 55 - { 56 - .addr = client->addr, 57 - .flags = 0, 58 - .len = 1, 59 - .buf = data 60 - }, /* setup read ptr */ 61 - { 62 - .addr = client->addr, 63 - .flags = I2C_M_RD, 64 - .len = n, 65 - .buf = data 66 - } 67 - }; 68 - 69 - int ret; 70 - 71 - data[0] = reg; 72 - ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); 73 - if (ret != ARRAY_SIZE(msgs)) { 74 - dev_err(&client->dev, "%s: read error, ret=%d\n", 75 - __func__, ret); 76 - return -EIO; 77 - } 78 - 79 - return 0; 80 - } 81 - 82 - 83 - static int isl12022_write_reg(struct i2c_client *client, 84 - uint8_t reg, uint8_t val) 85 - { 86 - uint8_t data[2] = { reg, val }; 87 - int err; 88 - 89 - err = i2c_master_send(client, data, sizeof(data)); 90 - if (err != sizeof(data)) { 91 - dev_err(&client->dev, 92 - "%s: err=%d addr=%02x, data=%02x\n", 93 - __func__, err, data[0], data[1]); 94 - return -EIO; 95 - } 96 - 97 - return 0; 98 - } 99 - 100 101 /* 102 * In the routines that deal directly with the isl12022 hardware, we use ··· 52 */ 53 static int isl12022_rtc_read_time(struct device *dev, struct rtc_time *tm) 54 { 55 - struct i2c_client *client = to_i2c_client(dev); 56 uint8_t buf[ISL12022_REG_INT + 1]; 57 int ret; 58 59 - ret = isl12022_read_regs(client, ISL12022_REG_SC, buf, sizeof(buf)); 60 if (ret) 61 return ret; 62 63 if (buf[ISL12022_REG_SR] & (ISL12022_SR_LBAT85 | ISL12022_SR_LBAT75)) { 64 - dev_warn(&client->dev, 65 "voltage dropped below %u%%, " 66 "date and time is not reliable.\n", 67 buf[ISL12022_REG_SR] & ISL12022_SR_LBAT85 ? 85 : 75); 68 } 69 70 - dev_dbg(&client->dev, 71 "%s: raw data is sec=%02x, min=%02x, hr=%02x, " 72 "mday=%02x, mon=%02x, year=%02x, wday=%02x, " 73 "sr=%02x, int=%02x", ··· 91 tm->tm_mon = bcd2bin(buf[ISL12022_REG_MO] & 0x1F) - 1; 92 tm->tm_year = bcd2bin(buf[ISL12022_REG_YR]) + 100; 93 94 - dev_dbg(&client->dev, "%s: secs=%d, mins=%d, hours=%d, " 95 - "mday=%d, mon=%d, year=%d, wday=%d\n", 96 - __func__, 97 - tm->tm_sec, tm->tm_min, tm->tm_hour, 98 - tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 99 100 return 0; 101 } 102 103 static int isl12022_rtc_set_time(struct device *dev, struct rtc_time *tm) 104 { 105 - struct i2c_client *client = to_i2c_client(dev); 106 - struct isl12022 *isl12022 = i2c_get_clientdata(client); 107 - size_t i; 108 int ret; 109 uint8_t buf[ISL12022_REG_DW + 1]; 110 111 - dev_dbg(&client->dev, "%s: secs=%d, mins=%d, hours=%d, " 112 - "mday=%d, mon=%d, year=%d, wday=%d\n", 113 - __func__, 114 - tm->tm_sec, tm->tm_min, tm->tm_hour, 115 - tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 116 117 - if (!isl12022->write_enabled) { 118 - 119 - ret = isl12022_read_regs(client, ISL12022_REG_INT, buf, 1); 120 - if (ret) 121 - return ret; 122 - 123 - /* Check if WRTC (write rtc enable) is set factory default is 124 - * 0 (not set) */ 125 - if (!(buf[0] & ISL12022_INT_WRTC)) { 126 - dev_info(&client->dev, 127 - "init write enable and 24 hour format\n"); 128 - 129 - /* Set the write enable bit. */ 130 - ret = isl12022_write_reg(client, 131 - ISL12022_REG_INT, 132 - buf[0] | ISL12022_INT_WRTC); 133 - if (ret) 134 - return ret; 135 - 136 - /* Write to any RTC register to start RTC, we use the 137 - * HR register, setting the MIL bit to use the 24 hour 138 - * format. */ 139 - ret = isl12022_read_regs(client, ISL12022_REG_HR, 140 - buf, 1); 141 - if (ret) 142 - return ret; 143 - 144 - ret = isl12022_write_reg(client, 145 - ISL12022_REG_HR, 146 - buf[0] | ISL12022_HR_MIL); 147 - if (ret) 148 - return ret; 149 - } 150 - 151 - isl12022->write_enabled = true; 152 - } 153 154 /* hours, minutes and seconds */ 155 buf[ISL12022_REG_SC] = bin2bcd(tm->tm_sec); ··· 126 127 buf[ISL12022_REG_DW] = tm->tm_wday & 0x07; 128 129 - /* write register's data */ 130 - for (i = 0; i < ARRAY_SIZE(buf); i++) { 131 - ret = isl12022_write_reg(client, ISL12022_REG_SC + i, 132 - buf[ISL12022_REG_SC + i]); 133 - if (ret) 134 - return -EIO; 135 - } 136 - 137 - return 0; 138 } 139 140 static const struct rtc_class_ops isl12022_rtc_ops = { 141 .read_time = isl12022_rtc_read_time, 142 .set_time = isl12022_rtc_set_time, 143 }; 144 145 static int isl12022_probe(struct i2c_client *client) ··· 152 GFP_KERNEL); 153 if (!isl12022) 154 return -ENOMEM; 155 156 - i2c_set_clientdata(client, isl12022); 157 158 - isl12022->rtc = devm_rtc_device_register(&client->dev, 159 - isl12022_driver.driver.name, 160 - &isl12022_rtc_ops, THIS_MODULE); 161 - return PTR_ERR_OR_ZERO(isl12022->rtc); 162 } 163 164 #ifdef CONFIG_OF
··· 16 #include <linux/err.h> 17 #include <linux/of.h> 18 #include <linux/of_device.h> 19 + #include <linux/regmap.h> 20 21 /* ISL register offsets */ 22 #define ISL12022_REG_SC 0x00 ··· 42 43 struct isl12022 { 44 struct rtc_device *rtc; 45 + struct regmap *regmap; 46 }; 47 48 /* 49 * In the routines that deal directly with the isl12022 hardware, we use ··· 103 */ 104 static int isl12022_rtc_read_time(struct device *dev, struct rtc_time *tm) 105 { 106 + struct isl12022 *isl12022 = dev_get_drvdata(dev); 107 + struct regmap *regmap = isl12022->regmap; 108 uint8_t buf[ISL12022_REG_INT + 1]; 109 int ret; 110 111 + ret = regmap_bulk_read(regmap, ISL12022_REG_SC, buf, sizeof(buf)); 112 if (ret) 113 return ret; 114 115 if (buf[ISL12022_REG_SR] & (ISL12022_SR_LBAT85 | ISL12022_SR_LBAT75)) { 116 + dev_warn(dev, 117 "voltage dropped below %u%%, " 118 "date and time is not reliable.\n", 119 buf[ISL12022_REG_SR] & ISL12022_SR_LBAT85 ? 85 : 75); 120 } 121 122 + dev_dbg(dev, 123 "%s: raw data is sec=%02x, min=%02x, hr=%02x, " 124 "mday=%02x, mon=%02x, year=%02x, wday=%02x, " 125 "sr=%02x, int=%02x", ··· 141 tm->tm_mon = bcd2bin(buf[ISL12022_REG_MO] & 0x1F) - 1; 142 tm->tm_year = bcd2bin(buf[ISL12022_REG_YR]) + 100; 143 144 + dev_dbg(dev, "%s: %ptR\n", __func__, tm); 145 146 return 0; 147 } 148 149 static int isl12022_rtc_set_time(struct device *dev, struct rtc_time *tm) 150 { 151 + struct isl12022 *isl12022 = dev_get_drvdata(dev); 152 + struct regmap *regmap = isl12022->regmap; 153 int ret; 154 uint8_t buf[ISL12022_REG_DW + 1]; 155 156 + dev_dbg(dev, "%s: %ptR\n", __func__, tm); 157 158 + /* Ensure the write enable bit is set. */ 159 + ret = regmap_update_bits(regmap, ISL12022_REG_INT, 160 + ISL12022_INT_WRTC, ISL12022_INT_WRTC); 161 + if (ret) 162 + return ret; 163 164 /* hours, minutes and seconds */ 165 buf[ISL12022_REG_SC] = bin2bcd(tm->tm_sec); ··· 216 217 buf[ISL12022_REG_DW] = tm->tm_wday & 0x07; 218 219 + return regmap_bulk_write(isl12022->regmap, ISL12022_REG_SC, 220 + buf, sizeof(buf)); 221 } 222 223 static const struct rtc_class_ops isl12022_rtc_ops = { 224 .read_time = isl12022_rtc_read_time, 225 .set_time = isl12022_rtc_set_time, 226 + }; 227 + 228 + static const struct regmap_config regmap_config = { 229 + .reg_bits = 8, 230 + .val_bits = 8, 231 + .use_single_write = true, 232 }; 233 234 static int isl12022_probe(struct i2c_client *client) ··· 243 GFP_KERNEL); 244 if (!isl12022) 245 return -ENOMEM; 246 + dev_set_drvdata(&client->dev, isl12022); 247 248 + isl12022->regmap = devm_regmap_init_i2c(client, &regmap_config); 249 + if (IS_ERR(isl12022->regmap)) { 250 + dev_err(&client->dev, "regmap allocation failed\n"); 251 + return PTR_ERR(isl12022->regmap); 252 + } 253 254 + isl12022->rtc = devm_rtc_allocate_device(&client->dev); 255 + if (IS_ERR(isl12022->rtc)) 256 + return PTR_ERR(isl12022->rtc); 257 + 258 + isl12022->rtc->ops = &isl12022_rtc_ops; 259 + isl12022->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 260 + isl12022->rtc->range_max = RTC_TIMESTAMP_END_2099; 261 + 262 + return devm_rtc_register_device(isl12022->rtc); 263 } 264 265 #ifdef CONFIG_OF
+3 -22
drivers/rtc/rtc-jz4740.c
··· 257 kernel_halt(); 258 } 259 260 - static void jz4740_rtc_clk_disable(void *data) 261 - { 262 - clk_disable_unprepare(data); 263 - } 264 - 265 static const struct of_device_id jz4740_rtc_of_match[] = { 266 { .compatible = "ingenic,jz4740-rtc", .data = (void *)ID_JZ4740 }, 267 { .compatible = "ingenic,jz4760-rtc", .data = (void *)ID_JZ4760 }, ··· 324 if (IS_ERR(rtc->base)) 325 return PTR_ERR(rtc->base); 326 327 - clk = devm_clk_get(dev, "rtc"); 328 - if (IS_ERR(clk)) { 329 - dev_err(dev, "Failed to get RTC clock\n"); 330 - return PTR_ERR(clk); 331 - } 332 - 333 - ret = clk_prepare_enable(clk); 334 - if (ret) { 335 - dev_err(dev, "Failed to enable clock\n"); 336 - return ret; 337 - } 338 - 339 - ret = devm_add_action_or_reset(dev, jz4740_rtc_clk_disable, clk); 340 - if (ret) { 341 - dev_err(dev, "Failed to register devm action\n"); 342 - return ret; 343 - } 344 345 spin_lock_init(&rtc->lock); 346
··· 257 kernel_halt(); 258 } 259 260 static const struct of_device_id jz4740_rtc_of_match[] = { 261 { .compatible = "ingenic,jz4740-rtc", .data = (void *)ID_JZ4740 }, 262 { .compatible = "ingenic,jz4760-rtc", .data = (void *)ID_JZ4760 }, ··· 329 if (IS_ERR(rtc->base)) 330 return PTR_ERR(rtc->base); 331 332 + clk = devm_clk_get_enabled(dev, "rtc"); 333 + if (IS_ERR(clk)) 334 + return dev_err_probe(dev, PTR_ERR(clk), "Failed to get RTC clock\n"); 335 336 spin_lock_init(&rtc->lock); 337
+4 -22
drivers/rtc/rtc-mpfs.c
··· 193 return 0; 194 } 195 196 - static inline struct clk *mpfs_rtc_init_clk(struct device *dev) 197 - { 198 - struct clk *clk; 199 - int ret; 200 - 201 - clk = devm_clk_get(dev, "rtc"); 202 - if (IS_ERR(clk)) 203 - return clk; 204 - 205 - ret = clk_prepare_enable(clk); 206 - if (ret) 207 - return ERR_PTR(ret); 208 - 209 - devm_add_action_or_reset(dev, (void (*) (void *))clk_disable_unprepare, clk); 210 - return clk; 211 - } 212 - 213 static irqreturn_t mpfs_rtc_wakeup_irq_handler(int irq, void *dev) 214 { 215 struct mpfs_rtc_dev *rtcdev = dev; ··· 216 { 217 struct mpfs_rtc_dev *rtcdev; 218 struct clk *clk; 219 - u32 prescaler; 220 int wakeup_irq, ret; 221 222 rtcdev = devm_kzalloc(&pdev->dev, sizeof(struct mpfs_rtc_dev), GFP_KERNEL); ··· 234 /* range is capped by alarm max, lower reg is 31:0 & upper is 10:0 */ 235 rtcdev->rtc->range_max = GENMASK_ULL(42, 0); 236 237 - clk = mpfs_rtc_init_clk(&pdev->dev); 238 if (IS_ERR(clk)) 239 return PTR_ERR(clk); 240 ··· 258 259 /* prescaler hardware adds 1 to reg value */ 260 prescaler = clk_get_rate(devm_clk_get(&pdev->dev, "rtcref")) - 1; 261 - 262 if (prescaler > MAX_PRESCALER_COUNT) { 263 - dev_dbg(&pdev->dev, "invalid prescaler %d\n", prescaler); 264 return -EINVAL; 265 } 266 267 writel(prescaler, rtcdev->base + PRESCALER_REG); 268 - dev_info(&pdev->dev, "prescaler set to: 0x%X \r\n", prescaler); 269 270 device_init_wakeup(&pdev->dev, true); 271 ret = dev_pm_set_wake_irq(&pdev->dev, wakeup_irq);
··· 193 return 0; 194 } 195 196 static irqreturn_t mpfs_rtc_wakeup_irq_handler(int irq, void *dev) 197 { 198 struct mpfs_rtc_dev *rtcdev = dev; ··· 233 { 234 struct mpfs_rtc_dev *rtcdev; 235 struct clk *clk; 236 + unsigned long prescaler; 237 int wakeup_irq, ret; 238 239 rtcdev = devm_kzalloc(&pdev->dev, sizeof(struct mpfs_rtc_dev), GFP_KERNEL); ··· 251 /* range is capped by alarm max, lower reg is 31:0 & upper is 10:0 */ 252 rtcdev->rtc->range_max = GENMASK_ULL(42, 0); 253 254 + clk = devm_clk_get_enabled(&pdev->dev, "rtc"); 255 if (IS_ERR(clk)) 256 return PTR_ERR(clk); 257 ··· 275 276 /* prescaler hardware adds 1 to reg value */ 277 prescaler = clk_get_rate(devm_clk_get(&pdev->dev, "rtcref")) - 1; 278 if (prescaler > MAX_PRESCALER_COUNT) { 279 + dev_dbg(&pdev->dev, "invalid prescaler %lu\n", prescaler); 280 return -EINVAL; 281 } 282 283 writel(prescaler, rtcdev->base + PRESCALER_REG); 284 + dev_info(&pdev->dev, "prescaler set to: %lu\n", prescaler); 285 286 device_init_wakeup(&pdev->dev, true); 287 ret = dev_pm_set_wake_irq(&pdev->dev, wakeup_irq);
+2 -25
drivers/rtc/rtc-mxc.c
··· 291 .alarm_irq_enable = mxc_rtc_alarm_irq_enable, 292 }; 293 294 - static void mxc_rtc_action(void *p) 295 - { 296 - struct rtc_plat_data *pdata = p; 297 - 298 - clk_disable_unprepare(pdata->clk_ref); 299 - clk_disable_unprepare(pdata->clk_ipg); 300 - } 301 - 302 static int mxc_rtc_probe(struct platform_device *pdev) 303 { 304 struct rtc_device *rtc; ··· 333 rtc->range_max = (1 << 16) * 86400ULL - 1; 334 } 335 336 - pdata->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); 337 if (IS_ERR(pdata->clk_ipg)) { 338 dev_err(&pdev->dev, "unable to get ipg clock!\n"); 339 return PTR_ERR(pdata->clk_ipg); 340 } 341 342 - ret = clk_prepare_enable(pdata->clk_ipg); 343 - if (ret) 344 - return ret; 345 - 346 - pdata->clk_ref = devm_clk_get(&pdev->dev, "ref"); 347 if (IS_ERR(pdata->clk_ref)) { 348 - clk_disable_unprepare(pdata->clk_ipg); 349 dev_err(&pdev->dev, "unable to get ref clock!\n"); 350 return PTR_ERR(pdata->clk_ref); 351 } 352 - 353 - ret = clk_prepare_enable(pdata->clk_ref); 354 - if (ret) { 355 - clk_disable_unprepare(pdata->clk_ipg); 356 - return ret; 357 - } 358 - 359 - ret = devm_add_action_or_reset(&pdev->dev, mxc_rtc_action, pdata); 360 - if (ret) 361 - return ret; 362 363 rate = clk_get_rate(pdata->clk_ref); 364
··· 291 .alarm_irq_enable = mxc_rtc_alarm_irq_enable, 292 }; 293 294 static int mxc_rtc_probe(struct platform_device *pdev) 295 { 296 struct rtc_device *rtc; ··· 341 rtc->range_max = (1 << 16) * 86400ULL - 1; 342 } 343 344 + pdata->clk_ipg = devm_clk_get_enabled(&pdev->dev, "ipg"); 345 if (IS_ERR(pdata->clk_ipg)) { 346 dev_err(&pdev->dev, "unable to get ipg clock!\n"); 347 return PTR_ERR(pdata->clk_ipg); 348 } 349 350 + pdata->clk_ref = devm_clk_get_enabled(&pdev->dev, "ref"); 351 if (IS_ERR(pdata->clk_ref)) { 352 dev_err(&pdev->dev, "unable to get ref clock!\n"); 353 return PTR_ERR(pdata->clk_ref); 354 } 355 356 rate = clk_get_rate(pdata->clk_ref); 357
+2 -3
drivers/rtc/rtc-rv3028.c
··· 521 { 522 struct rv3028_data *rv3028 = dev_get_drvdata(dev); 523 int ret; 524 525 switch(param->param) { 526 - u32 value; 527 - 528 case RTC_PARAM_BACKUP_SWITCH_MODE: 529 ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value); 530 if (ret < 0) ··· 553 static int rv3028_param_set(struct device *dev, struct rtc_param *param) 554 { 555 struct rv3028_data *rv3028 = dev_get_drvdata(dev); 556 557 switch(param->param) { 558 - u8 mode; 559 case RTC_PARAM_BACKUP_SWITCH_MODE: 560 switch (param->uvalue) { 561 case RTC_BSM_DISABLED:
··· 521 { 522 struct rv3028_data *rv3028 = dev_get_drvdata(dev); 523 int ret; 524 + u32 value; 525 526 switch(param->param) { 527 case RTC_PARAM_BACKUP_SWITCH_MODE: 528 ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value); 529 if (ret < 0) ··· 554 static int rv3028_param_set(struct device *dev, struct rtc_param *param) 555 { 556 struct rv3028_data *rv3028 = dev_get_drvdata(dev); 557 + u8 mode; 558 559 switch(param->param) { 560 case RTC_PARAM_BACKUP_SWITCH_MODE: 561 switch (param->uvalue) { 562 case RTC_BSM_DISABLED:
+2
drivers/rtc/rtc-stmp3xxx.c
··· 107 wdt_pdev->dev.parent = &rtc_pdev->dev; 108 wdt_pdev->dev.platform_data = &wdt_pdata; 109 rc = platform_device_add(wdt_pdev); 110 } 111 112 if (rc)
··· 107 wdt_pdev->dev.parent = &rtc_pdev->dev; 108 wdt_pdev->dev.platform_data = &wdt_pdata; 109 rc = platform_device_add(wdt_pdev); 110 + if (rc) 111 + platform_device_put(wdt_pdev); 112 } 113 114 if (rc)
+19 -37
drivers/rtc/rtc-ti-k3.c
··· 11 #include <linux/module.h> 12 #include <linux/of_device.h> 13 #include <linux/platform_device.h> 14 #include <linux/property.h> 15 #include <linux/regmap.h> 16 #include <linux/rtc.h> ··· 45 /* Min and max values supported with 'offset' interface (swapped sign) */ 46 #define K3RTC_MIN_OFFSET (-277761) 47 #define K3RTC_MAX_OFFSET (277778) 48 - 49 - /** 50 - * struct ti_k3_rtc_soc_data - Private of compatible data for ti-k3-rtc 51 - * @unlock_irq_erratum: Has erratum for unlock infinite IRQs (erratum i2327) 52 - */ 53 - struct ti_k3_rtc_soc_data { 54 - const bool unlock_irq_erratum; 55 - }; 56 57 static const struct regmap_config ti_k3_rtc_regmap_config = { 58 .name = "peripheral-registers", ··· 111 * @rtc_dev: rtc device 112 * @regmap: rtc mmio regmap 113 * @r_fields: rtc register fields 114 - * @soc: SoC compatible match data 115 */ 116 struct ti_k3_rtc { 117 unsigned int irq; ··· 119 struct rtc_device *rtc_dev; 120 struct regmap *regmap; 121 struct regmap_field *r_fields[K3_RTC_MAX_FIELDS]; 122 - const struct ti_k3_rtc_soc_data *soc; 123 }; 124 125 static int k3rtc_field_read(struct ti_k3_rtc *priv, enum ti_k3_rtc_fields f) ··· 181 182 /* Skip fence since we are going to check the unlock bit as fence */ 183 ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_UNLOCK], ret, 184 - !ret, 2, priv->sync_timeout_us); 185 186 return ret; 187 } 188 189 static int k3rtc_configure(struct device *dev) 190 { ··· 210 * 211 * In such occurrence, it is assumed that the RTC module is unusable 212 */ 213 - if (priv->soc->unlock_irq_erratum) { 214 ret = k3rtc_check_unlocked(priv); 215 /* If there is an error OR if we are locked, return error */ 216 if (ret) { ··· 515 516 static int k3rtc_get_32kclk(struct device *dev, struct ti_k3_rtc *priv) 517 { 518 - int ret; 519 struct clk *clk; 520 521 - clk = devm_clk_get(dev, "osc32k"); 522 if (IS_ERR(clk)) 523 return PTR_ERR(clk); 524 - 525 - ret = clk_prepare_enable(clk); 526 - if (ret) 527 - return ret; 528 - 529 - ret = devm_add_action_or_reset(dev, (void (*)(void *))clk_disable_unprepare, clk); 530 - if (ret) 531 - return ret; 532 533 priv->rate_32k = clk_get_rate(clk); 534 ··· 535 */ 536 priv->sync_timeout_us = (u32)(DIV_ROUND_UP_ULL(1000000, priv->rate_32k) * 4); 537 538 - return ret; 539 } 540 541 static int k3rtc_get_vbusclk(struct device *dev, struct ti_k3_rtc *priv) 542 { 543 - int ret; 544 struct clk *clk; 545 546 /* Note: VBUS isn't a context clock, it is needed for hardware operation */ 547 - clk = devm_clk_get(dev, "vbus"); 548 if (IS_ERR(clk)) 549 return PTR_ERR(clk); 550 551 - ret = clk_prepare_enable(clk); 552 - if (ret) 553 - return ret; 554 - 555 - return devm_add_action_or_reset(dev, (void (*)(void *))clk_disable_unprepare, clk); 556 } 557 558 static int ti_k3_rtc_probe(struct platform_device *pdev) ··· 590 if (IS_ERR(priv->rtc_dev)) 591 return PTR_ERR(priv->rtc_dev); 592 593 - priv->soc = of_device_get_match_data(dev); 594 - 595 priv->rtc_dev->ops = &ti_k3_rtc_ops; 596 priv->rtc_dev->range_max = (1ULL << 48) - 1; /* 48Bit seconds */ 597 ti_k3_rtc_nvmem_config.priv = priv; ··· 621 return devm_rtc_nvmem_register(priv->rtc_dev, &ti_k3_rtc_nvmem_config); 622 } 623 624 - static const struct ti_k3_rtc_soc_data ti_k3_am62_data = { 625 - .unlock_irq_erratum = true, 626 - }; 627 - 628 static const struct of_device_id ti_k3_rtc_of_match_table[] = { 629 - {.compatible = "ti,am62-rtc", .data = &ti_k3_am62_data}, 630 {} 631 }; 632 MODULE_DEVICE_TABLE(of, ti_k3_rtc_of_match_table);
··· 11 #include <linux/module.h> 12 #include <linux/of_device.h> 13 #include <linux/platform_device.h> 14 + #include <linux/sys_soc.h> 15 #include <linux/property.h> 16 #include <linux/regmap.h> 17 #include <linux/rtc.h> ··· 44 /* Min and max values supported with 'offset' interface (swapped sign) */ 45 #define K3RTC_MIN_OFFSET (-277761) 46 #define K3RTC_MAX_OFFSET (277778) 47 48 static const struct regmap_config ti_k3_rtc_regmap_config = { 49 .name = "peripheral-registers", ··· 118 * @rtc_dev: rtc device 119 * @regmap: rtc mmio regmap 120 * @r_fields: rtc register fields 121 */ 122 struct ti_k3_rtc { 123 unsigned int irq; ··· 127 struct rtc_device *rtc_dev; 128 struct regmap *regmap; 129 struct regmap_field *r_fields[K3_RTC_MAX_FIELDS]; 130 }; 131 132 static int k3rtc_field_read(struct ti_k3_rtc *priv, enum ti_k3_rtc_fields f) ··· 190 191 /* Skip fence since we are going to check the unlock bit as fence */ 192 ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_UNLOCK], ret, 193 + ret, 2, priv->sync_timeout_us); 194 195 return ret; 196 } 197 + 198 + /* 199 + * This is the list of SoCs affected by TI's i2327 errata causing the RTC 200 + * state-machine to break if not unlocked fast enough during boot. These 201 + * SoCs must have the bootloader unlock this device very early in the 202 + * boot-flow before we (Linux) can use this device. 203 + */ 204 + static const struct soc_device_attribute has_erratum_i2327[] = { 205 + { .family = "AM62X", .revision = "SR1.0" }, 206 + { /* sentinel */ } 207 + }; 208 209 static int k3rtc_configure(struct device *dev) 210 { ··· 208 * 209 * In such occurrence, it is assumed that the RTC module is unusable 210 */ 211 + if (soc_device_match(has_erratum_i2327)) { 212 ret = k3rtc_check_unlocked(priv); 213 /* If there is an error OR if we are locked, return error */ 214 if (ret) { ··· 513 514 static int k3rtc_get_32kclk(struct device *dev, struct ti_k3_rtc *priv) 515 { 516 struct clk *clk; 517 518 + clk = devm_clk_get_enabled(dev, "osc32k"); 519 if (IS_ERR(clk)) 520 return PTR_ERR(clk); 521 522 priv->rate_32k = clk_get_rate(clk); 523 ··· 542 */ 543 priv->sync_timeout_us = (u32)(DIV_ROUND_UP_ULL(1000000, priv->rate_32k) * 4); 544 545 + return 0; 546 } 547 548 static int k3rtc_get_vbusclk(struct device *dev, struct ti_k3_rtc *priv) 549 { 550 struct clk *clk; 551 552 /* Note: VBUS isn't a context clock, it is needed for hardware operation */ 553 + clk = devm_clk_get_enabled(dev, "vbus"); 554 if (IS_ERR(clk)) 555 return PTR_ERR(clk); 556 557 + return 0; 558 } 559 560 static int ti_k3_rtc_probe(struct platform_device *pdev) ··· 602 if (IS_ERR(priv->rtc_dev)) 603 return PTR_ERR(priv->rtc_dev); 604 605 priv->rtc_dev->ops = &ti_k3_rtc_ops; 606 priv->rtc_dev->range_max = (1ULL << 48) - 1; /* 48Bit seconds */ 607 ti_k3_rtc_nvmem_config.priv = priv; ··· 635 return devm_rtc_nvmem_register(priv->rtc_dev, &ti_k3_rtc_nvmem_config); 636 } 637 638 static const struct of_device_id ti_k3_rtc_of_match_table[] = { 639 + {.compatible = "ti,am62-rtc" }, 640 {} 641 }; 642 MODULE_DEVICE_TABLE(of, ti_k3_rtc_of_match_table);