aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/rtc/rtc-cmos.c129
1 files changed, 117 insertions, 12 deletions
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index 29cf1457ca10..ab455ddb16cf 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -393,6 +393,80 @@ static const struct rtc_class_ops cmos_rtc_ops = {
393 393
394/*----------------------------------------------------------------*/ 394/*----------------------------------------------------------------*/
395 395
396/*
397 * All these chips have at least 64 bytes of address space, shared by
398 * RTC registers and NVRAM. Most of those bytes of NVRAM are used
399 * by boot firmware. Modern chips have 128 or 256 bytes.
400 */
401
402#define NVRAM_OFFSET (RTC_REG_D + 1)
403
404static ssize_t
405cmos_nvram_read(struct kobject *kobj, struct bin_attribute *attr,
406 char *buf, loff_t off, size_t count)
407{
408 int retval;
409
410 if (unlikely(off >= attr->size))
411 return 0;
412 if ((off + count) > attr->size)
413 count = attr->size - off;
414
415 spin_lock_irq(&rtc_lock);
416 for (retval = 0, off += NVRAM_OFFSET; count--; retval++, off++)
417 *buf++ = CMOS_READ(off);
418 spin_unlock_irq(&rtc_lock);
419
420 return retval;
421}
422
423static ssize_t
424cmos_nvram_write(struct kobject *kobj, struct bin_attribute *attr,
425 char *buf, loff_t off, size_t count)
426{
427 struct cmos_rtc *cmos;
428 int retval;
429
430 cmos = dev_get_drvdata(container_of(kobj, struct device, kobj));
431 if (unlikely(off >= attr->size))
432 return -EFBIG;
433 if ((off + count) > attr->size)
434 count = attr->size - off;
435
436 /* NOTE: on at least PCs and Ataris, the boot firmware uses a
437 * checksum on part of the NVRAM data. That's currently ignored
438 * here. If userspace is smart enough to know what fields of
439 * NVRAM to update, updating checksums is also part of its job.
440 */
441 spin_lock_irq(&rtc_lock);
442 for (retval = 0, off += NVRAM_OFFSET; count--; retval++, off++) {
443 /* don't trash RTC registers */
444 if (off == cmos->day_alrm
445 || off == cmos->mon_alrm
446 || off == cmos->century)
447 buf++;
448 else
449 CMOS_WRITE(*buf++, off);
450 }
451 spin_unlock_irq(&rtc_lock);
452
453 return retval;
454}
455
456static struct bin_attribute nvram = {
457 .attr = {
458 .name = "nvram",
459 .mode = S_IRUGO | S_IWUSR,
460 .owner = THIS_MODULE,
461 },
462
463 .read = cmos_nvram_read,
464 .write = cmos_nvram_write,
465 /* size gets set up later */
466};
467
468/*----------------------------------------------------------------*/
469
396static struct cmos_rtc cmos_rtc; 470static struct cmos_rtc cmos_rtc;
397 471
398static irqreturn_t cmos_interrupt(int irq, void *p) 472static irqreturn_t cmos_interrupt(int irq, void *p)
@@ -412,11 +486,9 @@ static irqreturn_t cmos_interrupt(int irq, void *p)
412} 486}
413 487
414#ifdef CONFIG_PNP 488#ifdef CONFIG_PNP
415#define is_pnp() 1
416#define INITSECTION 489#define INITSECTION
417 490
418#else 491#else
419#define is_pnp() 0
420#define INITSECTION __init 492#define INITSECTION __init
421#endif 493#endif
422 494
@@ -426,6 +498,7 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
426 struct cmos_rtc_board_info *info = dev->platform_data; 498 struct cmos_rtc_board_info *info = dev->platform_data;
427 int retval = 0; 499 int retval = 0;
428 unsigned char rtc_control; 500 unsigned char rtc_control;
501 unsigned address_space;
429 502
430 /* there can be only one ... */ 503 /* there can be only one ... */
431 if (cmos_rtc.dev) 504 if (cmos_rtc.dev)
@@ -450,15 +523,36 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
450 cmos_rtc.irq = rtc_irq; 523 cmos_rtc.irq = rtc_irq;
451 cmos_rtc.iomem = ports; 524 cmos_rtc.iomem = ports;
452 525
526 /* Heuristic to deduce NVRAM size ... do what the legacy NVRAM
527 * driver did, but don't reject unknown configs. Old hardware
528 * won't address 128 bytes, and for now we ignore the way newer
529 * chips can address 256 bytes (using two more i/o ports).
530 */
531#if defined(CONFIG_ATARI)
532 address_space = 64;
533#elif defined(__i386__) || defined(__x86_64__) || defined(__arm__)
534 address_space = 128;
535#else
536#warning Assuming 128 bytes of RTC+NVRAM address space, not 64 bytes.
537 address_space = 128;
538#endif
539
453 /* For ACPI systems extension info comes from the FADT. On others, 540 /* For ACPI systems extension info comes from the FADT. On others,
454 * board specific setup provides it as appropriate. Systems where 541 * board specific setup provides it as appropriate. Systems where
455 * the alarm IRQ isn't automatically a wakeup IRQ (like ACPI, and 542 * the alarm IRQ isn't automatically a wakeup IRQ (like ACPI, and
456 * some almost-clones) can provide hooks to make that behave. 543 * some almost-clones) can provide hooks to make that behave.
544 *
545 * Note that ACPI doesn't preclude putting these registers into
546 * "extended" areas of the chip, including some that we won't yet
547 * expect CMOS_READ and friends to handle.
457 */ 548 */
458 if (info) { 549 if (info) {
459 cmos_rtc.day_alrm = info->rtc_day_alarm; 550 if (info->rtc_day_alarm && info->rtc_day_alarm < 128)
460 cmos_rtc.mon_alrm = info->rtc_mon_alarm; 551 cmos_rtc.day_alrm = info->rtc_day_alarm;
461 cmos_rtc.century = info->rtc_century; 552 if (info->rtc_mon_alarm && info->rtc_mon_alarm < 128)
553 cmos_rtc.mon_alrm = info->rtc_mon_alarm;
554 if (info->rtc_century && info->rtc_century < 128)
555 cmos_rtc.century = info->rtc_century;
462 556
463 if (info->wake_on && info->wake_off) { 557 if (info->wake_on && info->wake_off) {
464 cmos_rtc.wake_on = info->wake_on; 558 cmos_rtc.wake_on = info->wake_on;
@@ -518,10 +612,13 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
518 goto cleanup1; 612 goto cleanup1;
519 } 613 }
520 614
521 /* REVISIT optionally make 50 or 114 bytes NVRAM available, 615 /* export at least the first block of NVRAM */
522 * like rtc-ds1553, rtc-ds1742 ... this will often include 616 nvram.size = address_space - NVRAM_OFFSET;
523 * registers for century, and day/month alarm. 617 retval = sysfs_create_bin_file(&dev->kobj, &nvram);
524 */ 618 if (retval < 0) {
619 dev_dbg(dev, "can't create nvram file? %d\n", retval);
620 goto cleanup2;
621 }
525 622
526 pr_info("%s: alarms up to one %s%s\n", 623 pr_info("%s: alarms up to one %s%s\n",
527 cmos_rtc.rtc->dev.bus_id, 624 cmos_rtc.rtc->dev.bus_id,
@@ -536,6 +633,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
536 633
537 return 0; 634 return 0;
538 635
636cleanup2:
637 if (is_valid_irq(rtc_irq))
638 free_irq(rtc_irq, cmos_rtc.rtc);
539cleanup1: 639cleanup1:
540 cmos_rtc.dev = NULL; 640 cmos_rtc.dev = NULL;
541 rtc_device_unregister(cmos_rtc.rtc); 641 rtc_device_unregister(cmos_rtc.rtc);
@@ -563,6 +663,8 @@ static void __exit cmos_do_remove(struct device *dev)
563 663
564 cmos_do_shutdown(); 664 cmos_do_shutdown();
565 665
666 sysfs_remove_bin_file(&dev->kobj, &nvram);
667
566 if (is_valid_irq(cmos->irq)) 668 if (is_valid_irq(cmos->irq))
567 free_irq(cmos->irq, cmos->rtc); 669 free_irq(cmos->irq, cmos->rtc);
568 670
@@ -659,9 +761,12 @@ static int cmos_resume(struct device *dev)
659 761
660/*----------------------------------------------------------------*/ 762/*----------------------------------------------------------------*/
661 763
662/* The "CMOS" RTC normally lives on the platform_bus. On ACPI systems, 764/* On non-x86 systems, a "CMOS" RTC lives most naturally on platform_bus.
663 * the device node will always be created as a PNPACPI device. Plus 765 * ACPI systems always list these as PNPACPI devices, and pre-ACPI PCs
664 * pre-ACPI PCs probably list it in the PNPBIOS tables. 766 * probably list them in similar PNPBIOS tables; so PNP is more common.
767 *
768 * We don't use legacy "poke at the hardware" probing. Ancient PCs that
769 * predate even PNPBIOS should set up platform_bus devices.
665 */ 770 */
666 771
667#ifdef CONFIG_PNP 772#ifdef CONFIG_PNP