Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtc: bd70528: Do not require parent data

The ROHM BD71828 and BD71815 RTC drivers only need the regmap
pointer from parent. Regmap can be obtained via dev_get_regmap()
so do not require parent to populate driver data for that.

BD70528 on the other hand requires parent data to access the
watchdog so leave the parent data for BD70528 here for now.

Signed-off-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>

authored by

Matti Vaittinen and committed by
Lee Jones
f87c0d2e a38fd874

+31 -36
+31 -36
drivers/rtc/rtc-bd70528.c
··· 52 52 53 53 struct bd70528_rtc { 54 54 struct rohm_regmap_dev *parent; 55 + struct regmap *regmap; 55 56 struct device *dev; 56 57 u8 reg_time_start; 57 58 bool has_rtc_timers; ··· 235 234 int ret; 236 235 struct bd71828_rtc_alm alm; 237 236 struct bd70528_rtc *r = dev_get_drvdata(dev); 238 - struct rohm_regmap_dev *parent = r->parent; 239 237 240 - ret = regmap_bulk_read(parent->regmap, BD71828_REG_RTC_ALM_START, 238 + ret = regmap_bulk_read(r->regmap, BD71828_REG_RTC_ALM_START, 241 239 &alm, sizeof(alm)); 242 240 if (ret) { 243 241 dev_err(dev, "Failed to read alarm regs\n"); ··· 250 250 else 251 251 alm.alm_mask |= BD70528_MASK_ALM_EN; 252 252 253 - ret = regmap_bulk_write(parent->regmap, BD71828_REG_RTC_ALM_START, 253 + ret = regmap_bulk_write(r->regmap, BD71828_REG_RTC_ALM_START, 254 254 &alm, sizeof(alm)); 255 255 if (ret) 256 256 dev_err(dev, "Failed to set alarm time\n"); ··· 265 265 struct bd70528_rtc_alm alm; 266 266 int ret; 267 267 struct bd70528_rtc *r = dev_get_drvdata(dev); 268 - struct rohm_regmap_dev *parent = r->parent; 269 268 270 - ret = regmap_bulk_read(parent->regmap, BD70528_REG_RTC_WAKE_START, 271 - &wake, sizeof(wake)); 269 + ret = regmap_bulk_read(r->regmap, BD70528_REG_RTC_WAKE_START, &wake, 270 + sizeof(wake)); 272 271 if (ret) { 273 272 dev_err(dev, "Failed to read wake regs\n"); 274 273 return ret; 275 274 } 276 275 277 - ret = regmap_bulk_read(parent->regmap, BD70528_REG_RTC_ALM_START, 278 - &alm, sizeof(alm)); 276 + ret = regmap_bulk_read(r->regmap, BD70528_REG_RTC_ALM_START, &alm, 277 + sizeof(alm)); 279 278 if (ret) { 280 279 dev_err(dev, "Failed to read alarm regs\n"); 281 280 return ret; ··· 291 292 wake.ctrl &= ~BD70528_MASK_WAKE_EN; 292 293 } 293 294 294 - ret = regmap_bulk_write(parent->regmap, 295 - BD70528_REG_RTC_WAKE_START, &wake, 295 + ret = regmap_bulk_write(r->regmap, BD70528_REG_RTC_WAKE_START, &wake, 296 296 sizeof(wake)); 297 297 if (ret) { 298 298 dev_err(dev, "Failed to set wake time\n"); 299 299 return ret; 300 300 } 301 - ret = regmap_bulk_write(parent->regmap, BD70528_REG_RTC_ALM_START, 302 - &alm, sizeof(alm)); 301 + ret = regmap_bulk_write(r->regmap, BD70528_REG_RTC_ALM_START, &alm, 302 + sizeof(alm)); 303 303 if (ret) 304 304 dev_err(dev, "Failed to set alarm time\n"); 305 305 ··· 310 312 int ret; 311 313 struct bd71828_rtc_alm alm; 312 314 struct bd70528_rtc *r = dev_get_drvdata(dev); 313 - struct rohm_regmap_dev *parent = r->parent; 314 315 315 - ret = regmap_bulk_read(parent->regmap, BD71828_REG_RTC_ALM_START, 316 + ret = regmap_bulk_read(r->regmap, BD71828_REG_RTC_ALM_START, 316 317 &alm, sizeof(alm)); 317 318 if (ret) { 318 319 dev_err(dev, "Failed to read alarm regs\n"); ··· 333 336 struct bd70528_rtc_alm alm; 334 337 int ret; 335 338 struct bd70528_rtc *r = dev_get_drvdata(dev); 336 - struct rohm_regmap_dev *parent = r->parent; 337 339 338 - ret = regmap_bulk_read(parent->regmap, BD70528_REG_RTC_ALM_START, 339 - &alm, sizeof(alm)); 340 + ret = regmap_bulk_read(r->regmap, BD70528_REG_RTC_ALM_START, &alm, 341 + sizeof(alm)); 340 342 if (ret) { 341 343 dev_err(dev, "Failed to read alarm regs\n"); 342 344 return ret; ··· 356 360 int ret, tmpret, old_states; 357 361 struct bd70528_rtc_data rtc_data; 358 362 struct bd70528_rtc *r = dev_get_drvdata(dev); 359 - struct rohm_regmap_dev *parent = r->parent; 360 363 361 364 ret = bd70528_disable_rtc_based_timers(r, &old_states); 362 365 if (ret) 363 366 return ret; 364 367 365 - tmpret = regmap_bulk_read(parent->regmap, 366 - r->reg_time_start, &rtc_data, 368 + tmpret = regmap_bulk_read(r->regmap, r->reg_time_start, &rtc_data, 367 369 sizeof(rtc_data)); 368 370 if (tmpret) { 369 371 dev_err(dev, "Failed to read RTC time registers\n"); ··· 369 375 } 370 376 tm2rtc(t, &rtc_data); 371 377 372 - tmpret = regmap_bulk_write(parent->regmap, 373 - r->reg_time_start, &rtc_data, 378 + tmpret = regmap_bulk_write(r->regmap, r->reg_time_start, &rtc_data, 374 379 sizeof(rtc_data)); 375 380 if (tmpret) { 376 381 dev_err(dev, "Failed to set RTC time\n"); ··· 403 410 static int bd70528_get_time(struct device *dev, struct rtc_time *t) 404 411 { 405 412 struct bd70528_rtc *r = dev_get_drvdata(dev); 406 - struct rohm_regmap_dev *parent = r->parent; 407 413 struct bd70528_rtc_data rtc_data; 408 414 int ret; 409 415 410 416 /* read the RTC date and time registers all at once */ 411 - ret = regmap_bulk_read(parent->regmap, 412 - r->reg_time_start, &rtc_data, 417 + ret = regmap_bulk_read(r->regmap, r->reg_time_start, &rtc_data, 413 418 sizeof(rtc_data)); 414 419 if (ret) { 415 420 dev_err(dev, "Failed to read RTC time (err %d)\n", ret); ··· 434 443 dev_err(dev, "Failed to change wake state\n"); 435 444 goto out_unlock; 436 445 } 437 - ret = regmap_update_bits(r->parent->regmap, BD70528_REG_RTC_ALM_MASK, 446 + ret = regmap_update_bits(r->regmap, BD70528_REG_RTC_ALM_MASK, 438 447 BD70528_MASK_ALM_EN, enableval); 439 448 if (ret) 440 449 dev_err(dev, "Failed to change alarm state\n"); ··· 453 462 if (!enabled) 454 463 enableval = 0; 455 464 456 - ret = regmap_update_bits(r->parent->regmap, BD71828_REG_RTC_ALM0_MASK, 465 + ret = regmap_update_bits(r->regmap, BD71828_REG_RTC_ALM0_MASK, 457 466 BD70528_MASK_ALM_EN, enableval); 458 467 if (ret) 459 468 dev_err(dev, "Failed to change alarm state\n"); ··· 489 498 { 490 499 struct bd70528_rtc *bd_rtc; 491 500 const struct rtc_class_ops *rtc_ops; 492 - struct rohm_regmap_dev *parent; 493 501 const char *irq_name; 494 502 int ret; 495 503 struct rtc_device *rtc; ··· 498 508 u8 hour_reg; 499 509 enum rohm_chip_type chip = platform_get_device_id(pdev)->driver_data; 500 510 501 - parent = dev_get_drvdata(pdev->dev.parent); 502 - if (!parent) { 503 - dev_err(&pdev->dev, "No MFD driver data\n"); 504 - return -EINVAL; 505 - } 506 511 bd_rtc = devm_kzalloc(&pdev->dev, sizeof(*bd_rtc), GFP_KERNEL); 507 512 if (!bd_rtc) 508 513 return -ENOMEM; 509 514 510 - bd_rtc->parent = parent; 515 + bd_rtc->regmap = dev_get_regmap(pdev->dev.parent, NULL); 516 + if (!bd_rtc->regmap) { 517 + dev_err(&pdev->dev, "No regmap\n"); 518 + return -EINVAL; 519 + } 520 + 511 521 bd_rtc->dev = &pdev->dev; 512 522 513 523 switch (chip) { 514 524 case ROHM_CHIP_TYPE_BD70528: 525 + bd_rtc->parent = dev_get_drvdata(pdev->dev.parent); 526 + if (!bd_rtc->parent) { 527 + dev_err(&pdev->dev, "No MFD data\n"); 528 + return -EINVAL; 529 + } 515 530 irq_name = "bd70528-rtc-alm"; 516 531 bd_rtc->has_rtc_timers = true; 517 532 bd_rtc->reg_time_start = BD70528_REG_RTC_START; ··· 542 547 543 548 platform_set_drvdata(pdev, bd_rtc); 544 549 545 - ret = regmap_read(parent->regmap, hour_reg, &hr); 550 + ret = regmap_read(bd_rtc->regmap, hour_reg, &hr); 546 551 547 552 if (ret) { 548 553 dev_err(&pdev->dev, "Failed to reag RTC clock\n"); ··· 590 595 * from sub-registers when IRQ is disabled or freed. 591 596 */ 592 597 if (enable_main_irq) { 593 - ret = regmap_update_bits(parent->regmap, 598 + ret = regmap_update_bits(bd_rtc->regmap, 594 599 BD70528_REG_INT_MAIN_MASK, 595 600 BD70528_INT_RTC_MASK, 0); 596 601 if (ret) {