0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/clk.h>
0009 #include <linux/delay.h>
0010 #include <linux/mod_devicetable.h>
0011 #include <linux/module.h>
0012 #include <linux/of_device.h>
0013 #include <linux/platform_device.h>
0014 #include <linux/property.h>
0015 #include <linux/regmap.h>
0016 #include <linux/rtc.h>
0017
0018
0019 #define REG_K3RTC_S_CNT_LSW 0x08
0020 #define REG_K3RTC_S_CNT_MSW 0x0c
0021 #define REG_K3RTC_COMP 0x10
0022 #define REG_K3RTC_ON_OFF_S_CNT_LSW 0x20
0023 #define REG_K3RTC_ON_OFF_S_CNT_MSW 0x24
0024 #define REG_K3RTC_SCRATCH0 0x30
0025 #define REG_K3RTC_SCRATCH7 0x4c
0026 #define REG_K3RTC_GENERAL_CTL 0x50
0027 #define REG_K3RTC_IRQSTATUS_RAW_SYS 0x54
0028 #define REG_K3RTC_IRQSTATUS_SYS 0x58
0029 #define REG_K3RTC_IRQENABLE_SET_SYS 0x5c
0030 #define REG_K3RTC_IRQENABLE_CLR_SYS 0x60
0031 #define REG_K3RTC_SYNCPEND 0x68
0032 #define REG_K3RTC_KICK0 0x70
0033 #define REG_K3RTC_KICK1 0x74
0034
0035
0036 #define K3RTC_CNT_FMODE_S_CNT_VALUE (0x2 << 24)
0037
0038
0039 #define K3RTC_KICK0_UNLOCK_VALUE 0x83e70b13
0040 #define K3RTC_KICK1_UNLOCK_VALUE 0x95a4f1e0
0041
0042
0043 #define K3RTC_PPB_MULT (1000000000LL)
0044
0045 #define K3RTC_MIN_OFFSET (-277761)
0046 #define K3RTC_MAX_OFFSET (277778)
0047
0048
0049
0050
0051
0052 struct ti_k3_rtc_soc_data {
0053 const bool unlock_irq_erratum;
0054 };
0055
0056 static const struct regmap_config ti_k3_rtc_regmap_config = {
0057 .name = "peripheral-registers",
0058 .reg_bits = 32,
0059 .val_bits = 32,
0060 .reg_stride = 4,
0061 .max_register = REG_K3RTC_KICK1,
0062 };
0063
0064 enum ti_k3_rtc_fields {
0065 K3RTC_KICK0,
0066 K3RTC_KICK1,
0067 K3RTC_S_CNT_LSW,
0068 K3RTC_S_CNT_MSW,
0069 K3RTC_O32K_OSC_DEP_EN,
0070 K3RTC_UNLOCK,
0071 K3RTC_CNT_FMODE,
0072 K3RTC_PEND,
0073 K3RTC_RELOAD_FROM_BBD,
0074 K3RTC_COMP,
0075
0076 K3RTC_ALM_S_CNT_LSW,
0077 K3RTC_ALM_S_CNT_MSW,
0078 K3RTC_IRQ_STATUS_RAW,
0079 K3RTC_IRQ_STATUS,
0080 K3RTC_IRQ_ENABLE_SET,
0081 K3RTC_IRQ_ENABLE_CLR,
0082
0083 K3RTC_IRQ_STATUS_ALT,
0084 K3RTC_IRQ_ENABLE_CLR_ALT,
0085
0086 K3_RTC_MAX_FIELDS
0087 };
0088
0089 static const struct reg_field ti_rtc_reg_fields[] = {
0090 [K3RTC_KICK0] = REG_FIELD(REG_K3RTC_KICK0, 0, 31),
0091 [K3RTC_KICK1] = REG_FIELD(REG_K3RTC_KICK1, 0, 31),
0092 [K3RTC_S_CNT_LSW] = REG_FIELD(REG_K3RTC_S_CNT_LSW, 0, 31),
0093 [K3RTC_S_CNT_MSW] = REG_FIELD(REG_K3RTC_S_CNT_MSW, 0, 15),
0094 [K3RTC_O32K_OSC_DEP_EN] = REG_FIELD(REG_K3RTC_GENERAL_CTL, 21, 21),
0095 [K3RTC_UNLOCK] = REG_FIELD(REG_K3RTC_GENERAL_CTL, 23, 23),
0096 [K3RTC_CNT_FMODE] = REG_FIELD(REG_K3RTC_GENERAL_CTL, 24, 25),
0097 [K3RTC_PEND] = REG_FIELD(REG_K3RTC_SYNCPEND, 0, 1),
0098 [K3RTC_RELOAD_FROM_BBD] = REG_FIELD(REG_K3RTC_SYNCPEND, 31, 31),
0099 [K3RTC_COMP] = REG_FIELD(REG_K3RTC_COMP, 0, 31),
0100
0101
0102 [K3RTC_ALM_S_CNT_LSW] = REG_FIELD(REG_K3RTC_ON_OFF_S_CNT_LSW, 0, 31),
0103 [K3RTC_ALM_S_CNT_MSW] = REG_FIELD(REG_K3RTC_ON_OFF_S_CNT_MSW, 0, 15),
0104 [K3RTC_IRQ_STATUS_RAW] = REG_FIELD(REG_K3RTC_IRQSTATUS_RAW_SYS, 0, 0),
0105 [K3RTC_IRQ_STATUS] = REG_FIELD(REG_K3RTC_IRQSTATUS_SYS, 0, 0),
0106 [K3RTC_IRQ_ENABLE_SET] = REG_FIELD(REG_K3RTC_IRQENABLE_SET_SYS, 0, 0),
0107 [K3RTC_IRQ_ENABLE_CLR] = REG_FIELD(REG_K3RTC_IRQENABLE_CLR_SYS, 0, 0),
0108
0109 [K3RTC_IRQ_STATUS_ALT] = REG_FIELD(REG_K3RTC_IRQSTATUS_SYS, 1, 1),
0110 [K3RTC_IRQ_ENABLE_CLR_ALT] = REG_FIELD(REG_K3RTC_IRQENABLE_CLR_SYS, 1, 1),
0111 };
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123 struct ti_k3_rtc {
0124 unsigned int irq;
0125 u32 sync_timeout_us;
0126 unsigned long rate_32k;
0127 struct rtc_device *rtc_dev;
0128 struct regmap *regmap;
0129 struct regmap_field *r_fields[K3_RTC_MAX_FIELDS];
0130 const struct ti_k3_rtc_soc_data *soc;
0131 };
0132
0133 static int k3rtc_field_read(struct ti_k3_rtc *priv, enum ti_k3_rtc_fields f)
0134 {
0135 int ret;
0136 int val;
0137
0138 ret = regmap_field_read(priv->r_fields[f], &val);
0139
0140
0141
0142
0143 if (WARN_ON_ONCE(ret))
0144 return ret;
0145 return val;
0146 }
0147
0148 static void k3rtc_field_write(struct ti_k3_rtc *priv, enum ti_k3_rtc_fields f, u32 val)
0149 {
0150 regmap_field_write(priv->r_fields[f], val);
0151 }
0152
0153
0154
0155
0156
0157
0158
0159 static int k3rtc_fence(struct ti_k3_rtc *priv)
0160 {
0161 int ret;
0162
0163 ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_PEND], ret,
0164 !ret, 2, priv->sync_timeout_us);
0165
0166 return ret;
0167 }
0168
0169 static inline int k3rtc_check_unlocked(struct ti_k3_rtc *priv)
0170 {
0171 int ret;
0172
0173 ret = k3rtc_field_read(priv, K3RTC_UNLOCK);
0174 if (ret < 0)
0175 return ret;
0176
0177 return (ret) ? 0 : 1;
0178 }
0179
0180 static int k3rtc_unlock_rtc(struct ti_k3_rtc *priv)
0181 {
0182 int ret;
0183
0184 ret = k3rtc_check_unlocked(priv);
0185 if (!ret)
0186 return ret;
0187
0188 k3rtc_field_write(priv, K3RTC_KICK0, K3RTC_KICK0_UNLOCK_VALUE);
0189 k3rtc_field_write(priv, K3RTC_KICK1, K3RTC_KICK1_UNLOCK_VALUE);
0190
0191
0192 ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_UNLOCK], ret,
0193 !ret, 2, priv->sync_timeout_us);
0194
0195 return ret;
0196 }
0197
0198 static int k3rtc_configure(struct device *dev)
0199 {
0200 int ret;
0201 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211 if (priv->soc->unlock_irq_erratum) {
0212 ret = k3rtc_check_unlocked(priv);
0213
0214 if (ret) {
0215 dev_err(dev,
0216 HW_ERR "Erratum i2327 unlock QUIRK! Cannot operate!!\n");
0217 return -EFAULT;
0218 }
0219 } else {
0220
0221 ret = k3rtc_unlock_rtc(priv);
0222 if (ret) {
0223 dev_err(dev, "Failed to unlock(%d)!\n", ret);
0224 return ret;
0225 }
0226 }
0227
0228
0229 k3rtc_field_write(priv, K3RTC_O32K_OSC_DEP_EN, 0x1);
0230
0231
0232
0233
0234
0235 usleep_range(priv->sync_timeout_us, priv->sync_timeout_us + 5);
0236
0237
0238 ret = k3rtc_fence(priv);
0239 if (ret) {
0240 dev_err(dev,
0241 "Failed fence osc_dep enable(%d) - is 32k clk working?!\n", ret);
0242 return ret;
0243 }
0244
0245
0246
0247
0248
0249
0250 k3rtc_field_write(priv, K3RTC_CNT_FMODE, K3RTC_CNT_FMODE_S_CNT_VALUE);
0251
0252
0253 k3rtc_field_write(priv, K3RTC_IRQ_STATUS_ALT, 0x1);
0254 k3rtc_field_write(priv, K3RTC_IRQ_STATUS, 0x1);
0255
0256 k3rtc_field_write(priv, K3RTC_IRQ_ENABLE_CLR_ALT, 0x1);
0257 k3rtc_field_write(priv, K3RTC_IRQ_ENABLE_CLR, 0x1);
0258
0259
0260 return k3rtc_fence(priv);
0261 }
0262
0263 static int ti_k3_rtc_read_time(struct device *dev, struct rtc_time *tm)
0264 {
0265 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0266 u32 seconds_lo, seconds_hi;
0267
0268 seconds_lo = k3rtc_field_read(priv, K3RTC_S_CNT_LSW);
0269 seconds_hi = k3rtc_field_read(priv, K3RTC_S_CNT_MSW);
0270
0271 rtc_time64_to_tm((((time64_t)seconds_hi) << 32) | (time64_t)seconds_lo, tm);
0272
0273 return 0;
0274 }
0275
0276 static int ti_k3_rtc_set_time(struct device *dev, struct rtc_time *tm)
0277 {
0278 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0279 time64_t seconds;
0280
0281 seconds = rtc_tm_to_time64(tm);
0282
0283
0284
0285
0286
0287
0288 regmap_write(priv->regmap, REG_K3RTC_S_CNT_LSW, seconds);
0289 regmap_write(priv->regmap, REG_K3RTC_S_CNT_MSW, seconds >> 32);
0290
0291 return k3rtc_fence(priv);
0292 }
0293
0294 static int ti_k3_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
0295 {
0296 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0297 u32 reg;
0298 u32 offset = enabled ? K3RTC_IRQ_ENABLE_SET : K3RTC_IRQ_ENABLE_CLR;
0299
0300 reg = k3rtc_field_read(priv, K3RTC_IRQ_ENABLE_SET);
0301 if ((enabled && reg) || (!enabled && !reg))
0302 return 0;
0303
0304 k3rtc_field_write(priv, offset, 0x1);
0305
0306
0307
0308
0309
0310
0311 return k3rtc_fence(priv);
0312 }
0313
0314 static int ti_k3_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
0315 {
0316 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0317 u32 seconds_lo, seconds_hi;
0318
0319 seconds_lo = k3rtc_field_read(priv, K3RTC_ALM_S_CNT_LSW);
0320 seconds_hi = k3rtc_field_read(priv, K3RTC_ALM_S_CNT_MSW);
0321
0322 rtc_time64_to_tm((((time64_t)seconds_hi) << 32) | (time64_t)seconds_lo, &alarm->time);
0323
0324 alarm->enabled = k3rtc_field_read(priv, K3RTC_IRQ_ENABLE_SET);
0325
0326 return 0;
0327 }
0328
0329 static int ti_k3_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
0330 {
0331 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0332 time64_t seconds;
0333 int ret;
0334
0335 seconds = rtc_tm_to_time64(&alarm->time);
0336
0337 k3rtc_field_write(priv, K3RTC_ALM_S_CNT_LSW, seconds);
0338 k3rtc_field_write(priv, K3RTC_ALM_S_CNT_MSW, (seconds >> 32));
0339
0340
0341 ret = k3rtc_fence(priv);
0342 if (ret) {
0343 dev_err(dev, "Failed to fence(%d)! Potential config issue?\n", ret);
0344 return ret;
0345 }
0346
0347
0348 return ti_k3_rtc_alarm_irq_enable(dev, alarm->enabled);
0349 }
0350
0351 static int ti_k3_rtc_read_offset(struct device *dev, long *offset)
0352 {
0353 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0354 u32 ticks_per_hr = priv->rate_32k * 3600;
0355 int comp;
0356 s64 tmp;
0357
0358 comp = k3rtc_field_read(priv, K3RTC_COMP);
0359
0360
0361 tmp = comp * (s64)K3RTC_PPB_MULT;
0362 if (tmp < 0)
0363 tmp -= ticks_per_hr / 2LL;
0364 else
0365 tmp += ticks_per_hr / 2LL;
0366 tmp = div_s64(tmp, ticks_per_hr);
0367
0368
0369 *offset = (long)-tmp;
0370
0371 return 0;
0372 }
0373
0374 static int ti_k3_rtc_set_offset(struct device *dev, long offset)
0375 {
0376 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0377 u32 ticks_per_hr = priv->rate_32k * 3600;
0378 int comp;
0379 s64 tmp;
0380
0381
0382 if (offset < K3RTC_MIN_OFFSET || offset > K3RTC_MAX_OFFSET)
0383 return -ERANGE;
0384
0385
0386 tmp = offset * (s64)ticks_per_hr;
0387 if (tmp < 0)
0388 tmp -= K3RTC_PPB_MULT / 2LL;
0389 else
0390 tmp += K3RTC_PPB_MULT / 2LL;
0391 tmp = div_s64(tmp, K3RTC_PPB_MULT);
0392
0393
0394 comp = (int)-tmp;
0395
0396 k3rtc_field_write(priv, K3RTC_COMP, comp);
0397
0398 return k3rtc_fence(priv);
0399 }
0400
0401 static irqreturn_t ti_k3_rtc_interrupt(s32 irq, void *dev_id)
0402 {
0403 struct device *dev = dev_id;
0404 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0405 u32 reg;
0406 int ret;
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419 usleep_range(priv->sync_timeout_us, priv->sync_timeout_us + 2);
0420
0421
0422 reg = k3rtc_field_read(priv, K3RTC_IRQ_STATUS);
0423
0424 if (!reg) {
0425 u32 raw = k3rtc_field_read(priv, K3RTC_IRQ_STATUS_RAW);
0426
0427 dev_err(dev,
0428 HW_ERR
0429 "Erratum i2327/IRQ trig: status: 0x%08x / 0x%08x\n", reg, raw);
0430 return IRQ_NONE;
0431 }
0432
0433
0434
0435
0436
0437
0438 regmap_write(priv->regmap, REG_K3RTC_IRQSTATUS_SYS, 0x1);
0439
0440
0441 ret = k3rtc_fence(priv);
0442 if (ret) {
0443 dev_err(dev, "Failed to fence irq status clr(%d)!\n", ret);
0444 return IRQ_NONE;
0445 }
0446
0447
0448
0449
0450
0451 k3rtc_field_write(priv, K3RTC_RELOAD_FROM_BBD, 0x1);
0452
0453
0454 ret = k3rtc_fence(priv);
0455 if (ret) {
0456 dev_err(dev, "Failed to fence reload from bbd(%d)!\n", ret);
0457 return IRQ_NONE;
0458 }
0459
0460
0461 ret = regmap_field_read_poll_timeout(priv->r_fields[K3RTC_IRQ_STATUS],
0462 ret, !ret, 2, priv->sync_timeout_us);
0463 if (ret) {
0464 dev_err(dev, "Time out waiting for status clear\n");
0465 return IRQ_NONE;
0466 }
0467
0468
0469 rtc_update_irq(priv->rtc_dev, 1, RTC_IRQF | RTC_AF);
0470
0471 return IRQ_HANDLED;
0472 }
0473
0474 static const struct rtc_class_ops ti_k3_rtc_ops = {
0475 .read_time = ti_k3_rtc_read_time,
0476 .set_time = ti_k3_rtc_set_time,
0477 .read_alarm = ti_k3_rtc_read_alarm,
0478 .set_alarm = ti_k3_rtc_set_alarm,
0479 .read_offset = ti_k3_rtc_read_offset,
0480 .set_offset = ti_k3_rtc_set_offset,
0481 .alarm_irq_enable = ti_k3_rtc_alarm_irq_enable,
0482 };
0483
0484 static int ti_k3_rtc_scratch_read(void *priv_data, unsigned int offset,
0485 void *val, size_t bytes)
0486 {
0487 struct ti_k3_rtc *priv = (struct ti_k3_rtc *)priv_data;
0488
0489 return regmap_bulk_read(priv->regmap, REG_K3RTC_SCRATCH0 + offset, val, bytes / 4);
0490 }
0491
0492 static int ti_k3_rtc_scratch_write(void *priv_data, unsigned int offset,
0493 void *val, size_t bytes)
0494 {
0495 struct ti_k3_rtc *priv = (struct ti_k3_rtc *)priv_data;
0496 int ret;
0497
0498 ret = regmap_bulk_write(priv->regmap, REG_K3RTC_SCRATCH0 + offset, val, bytes / 4);
0499 if (ret)
0500 return ret;
0501
0502 return k3rtc_fence(priv);
0503 }
0504
0505 static struct nvmem_config ti_k3_rtc_nvmem_config = {
0506 .name = "ti_k3_rtc_scratch",
0507 .word_size = 4,
0508 .stride = 4,
0509 .size = REG_K3RTC_SCRATCH7 - REG_K3RTC_SCRATCH0 + 4,
0510 .reg_read = ti_k3_rtc_scratch_read,
0511 .reg_write = ti_k3_rtc_scratch_write,
0512 };
0513
0514 static int k3rtc_get_32kclk(struct device *dev, struct ti_k3_rtc *priv)
0515 {
0516 int ret;
0517 struct clk *clk;
0518
0519 clk = devm_clk_get(dev, "osc32k");
0520 if (IS_ERR(clk))
0521 return PTR_ERR(clk);
0522
0523 ret = clk_prepare_enable(clk);
0524 if (ret)
0525 return ret;
0526
0527 ret = devm_add_action_or_reset(dev, (void (*)(void *))clk_disable_unprepare, clk);
0528 if (ret)
0529 return ret;
0530
0531 priv->rate_32k = clk_get_rate(clk);
0532
0533
0534 if (priv->rate_32k != 32768)
0535 dev_warn(dev, "Clock rate %ld is not 32768! Could misbehave!\n",
0536 priv->rate_32k);
0537
0538
0539
0540
0541
0542
0543 priv->sync_timeout_us = (u32)(DIV_ROUND_UP_ULL(1000000, priv->rate_32k) * 4);
0544
0545 return ret;
0546 }
0547
0548 static int k3rtc_get_vbusclk(struct device *dev, struct ti_k3_rtc *priv)
0549 {
0550 int ret;
0551 struct clk *clk;
0552
0553
0554 clk = devm_clk_get(dev, "vbus");
0555 if (IS_ERR(clk))
0556 return PTR_ERR(clk);
0557
0558 ret = clk_prepare_enable(clk);
0559 if (ret)
0560 return ret;
0561
0562 return devm_add_action_or_reset(dev, (void (*)(void *))clk_disable_unprepare, clk);
0563 }
0564
0565 static int ti_k3_rtc_probe(struct platform_device *pdev)
0566 {
0567 struct device *dev = &pdev->dev;
0568 struct ti_k3_rtc *priv;
0569 void __iomem *rtc_base;
0570 int ret;
0571
0572 priv = devm_kzalloc(dev, sizeof(struct ti_k3_rtc), GFP_KERNEL);
0573 if (!priv)
0574 return -ENOMEM;
0575
0576 rtc_base = devm_platform_ioremap_resource(pdev, 0);
0577 if (IS_ERR(rtc_base))
0578 return PTR_ERR(rtc_base);
0579
0580 priv->regmap = devm_regmap_init_mmio(dev, rtc_base, &ti_k3_rtc_regmap_config);
0581 if (IS_ERR(priv->regmap))
0582 return PTR_ERR(priv->regmap);
0583
0584 ret = devm_regmap_field_bulk_alloc(dev, priv->regmap, priv->r_fields,
0585 ti_rtc_reg_fields, K3_RTC_MAX_FIELDS);
0586 if (ret)
0587 return ret;
0588
0589 ret = k3rtc_get_32kclk(dev, priv);
0590 if (ret)
0591 return ret;
0592 ret = k3rtc_get_vbusclk(dev, priv);
0593 if (ret)
0594 return ret;
0595
0596 ret = platform_get_irq(pdev, 0);
0597 if (ret < 0)
0598 return ret;
0599 priv->irq = (unsigned int)ret;
0600
0601 priv->rtc_dev = devm_rtc_allocate_device(dev);
0602 if (IS_ERR(priv->rtc_dev))
0603 return PTR_ERR(priv->rtc_dev);
0604
0605 priv->soc = of_device_get_match_data(dev);
0606
0607 priv->rtc_dev->ops = &ti_k3_rtc_ops;
0608 priv->rtc_dev->range_max = (1ULL << 48) - 1;
0609 ti_k3_rtc_nvmem_config.priv = priv;
0610
0611 ret = devm_request_threaded_irq(dev, priv->irq, NULL,
0612 ti_k3_rtc_interrupt,
0613 IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
0614 dev_name(dev), dev);
0615 if (ret) {
0616 dev_err(dev, "Could not request IRQ: %d\n", ret);
0617 return ret;
0618 }
0619
0620 platform_set_drvdata(pdev, priv);
0621
0622 ret = k3rtc_configure(dev);
0623 if (ret)
0624 return ret;
0625
0626 if (device_property_present(dev, "wakeup-source"))
0627 device_init_wakeup(dev, true);
0628 else
0629 device_set_wakeup_capable(dev, true);
0630
0631 ret = devm_rtc_register_device(priv->rtc_dev);
0632 if (ret)
0633 return ret;
0634
0635 return devm_rtc_nvmem_register(priv->rtc_dev, &ti_k3_rtc_nvmem_config);
0636 }
0637
0638 static const struct ti_k3_rtc_soc_data ti_k3_am62_data = {
0639 .unlock_irq_erratum = true,
0640 };
0641
0642 static const struct of_device_id ti_k3_rtc_of_match_table[] = {
0643 {.compatible = "ti,am62-rtc", .data = &ti_k3_am62_data},
0644 {}
0645 };
0646 MODULE_DEVICE_TABLE(of, ti_k3_rtc_of_match_table);
0647
0648 static int __maybe_unused ti_k3_rtc_suspend(struct device *dev)
0649 {
0650 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0651
0652 if (device_may_wakeup(dev))
0653 enable_irq_wake(priv->irq);
0654 return 0;
0655 }
0656
0657 static int __maybe_unused ti_k3_rtc_resume(struct device *dev)
0658 {
0659 struct ti_k3_rtc *priv = dev_get_drvdata(dev);
0660
0661 if (device_may_wakeup(dev))
0662 disable_irq_wake(priv->irq);
0663 return 0;
0664 }
0665
0666 static SIMPLE_DEV_PM_OPS(ti_k3_rtc_pm_ops, ti_k3_rtc_suspend, ti_k3_rtc_resume);
0667
0668 static struct platform_driver ti_k3_rtc_driver = {
0669 .probe = ti_k3_rtc_probe,
0670 .driver = {
0671 .name = "rtc-ti-k3",
0672 .of_match_table = ti_k3_rtc_of_match_table,
0673 .pm = &ti_k3_rtc_pm_ops,
0674 },
0675 };
0676 module_platform_driver(ti_k3_rtc_driver);
0677
0678 MODULE_LICENSE("GPL");
0679 MODULE_DESCRIPTION("TI K3 RTC driver");
0680 MODULE_AUTHOR("Nishanth Menon");