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