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

CHAR: Delete old and now unused DS1286 driver.

It was only used by two SGI platforms which recently were converted to
RTC_LIB and with RTC_LIB enabled the legacy drivers are no more selectable.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>

-620
-5
arch/mips/Kconfig
··· 327 327 select IP22_CPU_SCACHE 328 328 select IRQ_CPU 329 329 select GENERIC_ISA_DMA_SUPPORT_BROKEN 330 - select SGI_HAS_DS1286 331 330 select SGI_HAS_I8042 332 331 select SGI_HAS_INDYDOG 333 332 select SGI_HAS_HAL2 ··· 381 382 select HW_HAS_EISA 382 383 select I8253 383 384 select I8259 384 - select SGI_HAS_DS1286 385 385 select SGI_HAS_I8042 386 386 select SGI_HAS_INDYDOG 387 387 select SGI_HAS_HAL2 ··· 889 891 default y 890 892 891 893 config SERIAL_RM9000 892 - bool 893 - 894 - config SGI_HAS_DS1286 895 894 bool 896 895 897 896 config SGI_HAS_INDYDOG
-1
arch/mips/configs/ip22_defconfig
··· 771 771 CONFIG_INDYDOG=m 772 772 # CONFIG_HW_RANDOM is not set 773 773 # CONFIG_RTC is not set 774 - CONFIG_SGI_DS1286=m 775 774 # CONFIG_R3964 is not set 776 775 CONFIG_RAW_DRIVER=m 777 776 CONFIG_MAX_RAW_DEVS=256
-2
arch/mips/configs/ip28_defconfig
··· 70 70 CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y 71 71 CONFIG_IRQ_CPU=y 72 72 CONFIG_SWAP_IO_SPACE=y 73 - CONFIG_SGI_HAS_DS1286=y 74 73 CONFIG_SGI_HAS_INDYDOG=y 75 74 CONFIG_SGI_HAS_SEEQ=y 76 75 CONFIG_SGI_HAS_WD93=y ··· 584 585 # CONFIG_IPMI_HANDLER is not set 585 586 # CONFIG_HW_RANDOM is not set 586 587 # CONFIG_RTC is not set 587 - CONFIG_SGI_DS1286=y 588 588 # CONFIG_DTLK is not set 589 589 # CONFIG_R3964 is not set 590 590 # CONFIG_RAW_DRIVER is not set
-15
arch/mips/include/asm/ds1286.h
··· 1 - /* 2 - * This file is subject to the terms and conditions of the GNU General Public 3 - * License. See the file "COPYING" in the main directory of this archive 4 - * for more details. 5 - * 6 - * Machine dependent access functions for RTC registers. 7 - * 8 - * Copyright (C) 2003 Ralf Baechle (ralf@linux-mips.org) 9 - */ 10 - #ifndef _ASM_DS1286_H 11 - #define _ASM_DS1286_H 12 - 13 - #include <ds1286.h> 14 - 15 - #endif /* _ASM_DS1286_H */
-11
drivers/char/Kconfig
··· 812 812 To compile this driver as a module, choose M here: the 813 813 module will be called js-rtc. 814 814 815 - config SGI_DS1286 816 - tristate "SGI DS1286 RTC support" 817 - depends on SGI_HAS_DS1286 818 - help 819 - If you say Y here and create a character special file /dev/rtc with 820 - major number 10 and minor number 135 using mknod ("man mknod"), you 821 - will get access to the real time clock built into your computer. 822 - Every SGI has such a clock built in. It reports status information 823 - via the file /proc/rtc and its behaviour is set by various ioctls on 824 - /dev/rtc. 825 - 826 815 config SGI_IP27_RTC 827 816 bool "SGI M48T35 RTC support" 828 817 depends on SGI_IP27
-1
drivers/char/Makefile
··· 74 74 obj-$(CONFIG_HPET) += hpet.o 75 75 obj-$(CONFIG_GEN_RTC) += genrtc.o 76 76 obj-$(CONFIG_EFI_RTC) += efirtc.o 77 - obj-$(CONFIG_SGI_DS1286) += ds1286.o 78 77 obj-$(CONFIG_SGI_IP27_RTC) += ip27-rtc.o 79 78 obj-$(CONFIG_DS1302) += ds1302.o 80 79 obj-$(CONFIG_XILINX_HWICAP) += xilinx_hwicap/
-585
drivers/char/ds1286.c
··· 1 - /* 2 - * DS1286 Real Time Clock interface for Linux 3 - * 4 - * Copyright (C) 1998, 1999, 2000 Ralf Baechle 5 - * 6 - * Based on code written by Paul Gortmaker. 7 - * 8 - * This driver allows use of the real time clock (built into nearly all 9 - * computers) from user space. It exports the /dev/rtc interface supporting 10 - * various ioctl() and also the /proc/rtc pseudo-file for status 11 - * information. 12 - * 13 - * The ioctls can be used to set the interrupt behaviour and generation rate 14 - * from the RTC via IRQ 8. Then the /dev/rtc interface can be used to make 15 - * use of these timer interrupts, be they interval or alarm based. 16 - * 17 - * The /dev/rtc interface will block on reads until an interrupt has been 18 - * received. If a RTC interrupt has already happened, it will output an 19 - * unsigned long and then block. The output value contains the interrupt 20 - * status in the low byte and the number of interrupts since the last read 21 - * in the remaining high bytes. The /dev/rtc interface can also be used with 22 - * the select(2) call. 23 - * 24 - * This program is free software; you can redistribute it and/or modify it 25 - * under the terms of the GNU General Public License as published by the 26 - * Free Software Foundation; either version 2 of the License, or (at your 27 - * option) any later version. 28 - */ 29 - #include <linux/ds1286.h> 30 - #include <linux/smp_lock.h> 31 - #include <linux/types.h> 32 - #include <linux/errno.h> 33 - #include <linux/miscdevice.h> 34 - #include <linux/slab.h> 35 - #include <linux/ioport.h> 36 - #include <linux/fcntl.h> 37 - #include <linux/init.h> 38 - #include <linux/poll.h> 39 - #include <linux/rtc.h> 40 - #include <linux/spinlock.h> 41 - #include <linux/bcd.h> 42 - #include <linux/proc_fs.h> 43 - #include <linux/jiffies.h> 44 - 45 - #include <asm/uaccess.h> 46 - #include <asm/system.h> 47 - 48 - #define DS1286_VERSION "1.0" 49 - 50 - /* 51 - * We sponge a minor off of the misc major. No need slurping 52 - * up another valuable major dev number for this. If you add 53 - * an ioctl, make sure you don't conflict with SPARC's RTC 54 - * ioctls. 55 - */ 56 - 57 - static DECLARE_WAIT_QUEUE_HEAD(ds1286_wait); 58 - 59 - static ssize_t ds1286_read(struct file *file, char *buf, 60 - size_t count, loff_t *ppos); 61 - 62 - static int ds1286_ioctl(struct inode *inode, struct file *file, 63 - unsigned int cmd, unsigned long arg); 64 - 65 - static unsigned int ds1286_poll(struct file *file, poll_table *wait); 66 - 67 - static void ds1286_get_alm_time (struct rtc_time *alm_tm); 68 - static void ds1286_get_time(struct rtc_time *rtc_tm); 69 - static int ds1286_set_time(struct rtc_time *rtc_tm); 70 - 71 - static inline unsigned char ds1286_is_updating(void); 72 - 73 - static DEFINE_SPINLOCK(ds1286_lock); 74 - 75 - static int ds1286_read_proc(char *page, char **start, off_t off, 76 - int count, int *eof, void *data); 77 - 78 - /* 79 - * Bits in rtc_status. (7 bits of room for future expansion) 80 - */ 81 - 82 - #define RTC_IS_OPEN 0x01 /* means /dev/rtc is in use */ 83 - #define RTC_TIMER_ON 0x02 /* missed irq timer active */ 84 - 85 - static unsigned char ds1286_status; /* bitmapped status byte. */ 86 - 87 - static unsigned char days_in_mo[] = { 88 - 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 89 - }; 90 - 91 - /* 92 - * Now all the various file operations that we export. 93 - */ 94 - 95 - static ssize_t ds1286_read(struct file *file, char *buf, 96 - size_t count, loff_t *ppos) 97 - { 98 - return -EIO; 99 - } 100 - 101 - static int ds1286_ioctl(struct inode *inode, struct file *file, 102 - unsigned int cmd, unsigned long arg) 103 - { 104 - struct rtc_time wtime; 105 - 106 - switch (cmd) { 107 - case RTC_AIE_OFF: /* Mask alarm int. enab. bit */ 108 - { 109 - unsigned long flags; 110 - unsigned char val; 111 - 112 - if (!capable(CAP_SYS_TIME)) 113 - return -EACCES; 114 - 115 - spin_lock_irqsave(&ds1286_lock, flags); 116 - val = rtc_read(RTC_CMD); 117 - val |= RTC_TDM; 118 - rtc_write(val, RTC_CMD); 119 - spin_unlock_irqrestore(&ds1286_lock, flags); 120 - 121 - return 0; 122 - } 123 - case RTC_AIE_ON: /* Allow alarm interrupts. */ 124 - { 125 - unsigned long flags; 126 - unsigned char val; 127 - 128 - if (!capable(CAP_SYS_TIME)) 129 - return -EACCES; 130 - 131 - spin_lock_irqsave(&ds1286_lock, flags); 132 - val = rtc_read(RTC_CMD); 133 - val &= ~RTC_TDM; 134 - rtc_write(val, RTC_CMD); 135 - spin_unlock_irqrestore(&ds1286_lock, flags); 136 - 137 - return 0; 138 - } 139 - case RTC_WIE_OFF: /* Mask watchdog int. enab. bit */ 140 - { 141 - unsigned long flags; 142 - unsigned char val; 143 - 144 - if (!capable(CAP_SYS_TIME)) 145 - return -EACCES; 146 - 147 - spin_lock_irqsave(&ds1286_lock, flags); 148 - val = rtc_read(RTC_CMD); 149 - val |= RTC_WAM; 150 - rtc_write(val, RTC_CMD); 151 - spin_unlock_irqrestore(&ds1286_lock, flags); 152 - 153 - return 0; 154 - } 155 - case RTC_WIE_ON: /* Allow watchdog interrupts. */ 156 - { 157 - unsigned long flags; 158 - unsigned char val; 159 - 160 - if (!capable(CAP_SYS_TIME)) 161 - return -EACCES; 162 - 163 - spin_lock_irqsave(&ds1286_lock, flags); 164 - val = rtc_read(RTC_CMD); 165 - val &= ~RTC_WAM; 166 - rtc_write(val, RTC_CMD); 167 - spin_unlock_irqrestore(&ds1286_lock, flags); 168 - 169 - return 0; 170 - } 171 - case RTC_ALM_READ: /* Read the present alarm time */ 172 - { 173 - /* 174 - * This returns a struct rtc_time. Reading >= 0xc0 175 - * means "don't care" or "match all". Only the tm_hour, 176 - * tm_min, and tm_sec values are filled in. 177 - */ 178 - 179 - memset(&wtime, 0, sizeof(wtime)); 180 - ds1286_get_alm_time(&wtime); 181 - break; 182 - } 183 - case RTC_ALM_SET: /* Store a time into the alarm */ 184 - { 185 - /* 186 - * This expects a struct rtc_time. Writing 0xff means 187 - * "don't care" or "match all". Only the tm_hour, 188 - * tm_min and tm_sec are used. 189 - */ 190 - unsigned char hrs, min, sec; 191 - struct rtc_time alm_tm; 192 - 193 - if (!capable(CAP_SYS_TIME)) 194 - return -EACCES; 195 - 196 - if (copy_from_user(&alm_tm, (struct rtc_time*)arg, 197 - sizeof(struct rtc_time))) 198 - return -EFAULT; 199 - 200 - hrs = alm_tm.tm_hour; 201 - min = alm_tm.tm_min; 202 - sec = alm_tm.tm_sec; 203 - 204 - if (hrs >= 24) 205 - hrs = 0xff; 206 - 207 - if (min >= 60) 208 - min = 0xff; 209 - 210 - if (sec != 0) 211 - return -EINVAL; 212 - 213 - min = bin2bcd(min); 214 - min = bin2bcd(hrs); 215 - 216 - spin_lock(&ds1286_lock); 217 - rtc_write(hrs, RTC_HOURS_ALARM); 218 - rtc_write(min, RTC_MINUTES_ALARM); 219 - spin_unlock(&ds1286_lock); 220 - 221 - return 0; 222 - } 223 - case RTC_RD_TIME: /* Read the time/date from RTC */ 224 - { 225 - memset(&wtime, 0, sizeof(wtime)); 226 - ds1286_get_time(&wtime); 227 - break; 228 - } 229 - case RTC_SET_TIME: /* Set the RTC */ 230 - { 231 - struct rtc_time rtc_tm; 232 - 233 - if (!capable(CAP_SYS_TIME)) 234 - return -EACCES; 235 - 236 - if (copy_from_user(&rtc_tm, (struct rtc_time*)arg, 237 - sizeof(struct rtc_time))) 238 - return -EFAULT; 239 - 240 - return ds1286_set_time(&rtc_tm); 241 - } 242 - default: 243 - return -EINVAL; 244 - } 245 - return copy_to_user((void *)arg, &wtime, sizeof wtime) ? -EFAULT : 0; 246 - } 247 - 248 - /* 249 - * We enforce only one user at a time here with the open/close. 250 - * Also clear the previous interrupt data on an open, and clean 251 - * up things on a close. 252 - */ 253 - 254 - static int ds1286_open(struct inode *inode, struct file *file) 255 - { 256 - lock_kernel(); 257 - spin_lock_irq(&ds1286_lock); 258 - 259 - if (ds1286_status & RTC_IS_OPEN) 260 - goto out_busy; 261 - 262 - ds1286_status |= RTC_IS_OPEN; 263 - 264 - spin_unlock_irq(&ds1286_lock); 265 - unlock_kernel(); 266 - return 0; 267 - 268 - out_busy: 269 - spin_lock_irq(&ds1286_lock); 270 - unlock_kernel(); 271 - return -EBUSY; 272 - } 273 - 274 - static int ds1286_release(struct inode *inode, struct file *file) 275 - { 276 - ds1286_status &= ~RTC_IS_OPEN; 277 - 278 - return 0; 279 - } 280 - 281 - static unsigned int ds1286_poll(struct file *file, poll_table *wait) 282 - { 283 - poll_wait(file, &ds1286_wait, wait); 284 - 285 - return 0; 286 - } 287 - 288 - /* 289 - * The various file operations we support. 290 - */ 291 - 292 - static const struct file_operations ds1286_fops = { 293 - .llseek = no_llseek, 294 - .read = ds1286_read, 295 - .poll = ds1286_poll, 296 - .ioctl = ds1286_ioctl, 297 - .open = ds1286_open, 298 - .release = ds1286_release, 299 - }; 300 - 301 - static struct miscdevice ds1286_dev= 302 - { 303 - .minor = RTC_MINOR, 304 - .name = "rtc", 305 - .fops = &ds1286_fops, 306 - }; 307 - 308 - static int __init ds1286_init(void) 309 - { 310 - int err; 311 - 312 - printk(KERN_INFO "DS1286 Real Time Clock Driver v%s\n", DS1286_VERSION); 313 - 314 - err = misc_register(&ds1286_dev); 315 - if (err) 316 - goto out; 317 - 318 - if (!create_proc_read_entry("driver/rtc", 0, 0, ds1286_read_proc, NULL)) { 319 - err = -ENOMEM; 320 - 321 - goto out_deregister; 322 - } 323 - 324 - return 0; 325 - 326 - out_deregister: 327 - misc_deregister(&ds1286_dev); 328 - 329 - out: 330 - return err; 331 - } 332 - 333 - static void __exit ds1286_exit(void) 334 - { 335 - remove_proc_entry("driver/rtc", NULL); 336 - misc_deregister(&ds1286_dev); 337 - } 338 - 339 - static char *days[] = { 340 - "***", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" 341 - }; 342 - 343 - /* 344 - * Info exported via "/proc/rtc". 345 - */ 346 - static int ds1286_proc_output(char *buf) 347 - { 348 - char *p, *s; 349 - struct rtc_time tm; 350 - unsigned char hundredth, month, cmd, amode; 351 - 352 - p = buf; 353 - 354 - ds1286_get_time(&tm); 355 - hundredth = rtc_read(RTC_HUNDREDTH_SECOND); 356 - hundredth = bcd2bin(hundredth); 357 - 358 - p += sprintf(p, 359 - "rtc_time\t: %02d:%02d:%02d.%02d\n" 360 - "rtc_date\t: %04d-%02d-%02d\n", 361 - tm.tm_hour, tm.tm_min, tm.tm_sec, hundredth, 362 - tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday); 363 - 364 - /* 365 - * We implicitly assume 24hr mode here. Alarm values >= 0xc0 will 366 - * match any value for that particular field. Values that are 367 - * greater than a valid time, but less than 0xc0 shouldn't appear. 368 - */ 369 - ds1286_get_alm_time(&tm); 370 - p += sprintf(p, "alarm\t\t: %s ", days[tm.tm_wday]); 371 - if (tm.tm_hour <= 24) 372 - p += sprintf(p, "%02d:", tm.tm_hour); 373 - else 374 - p += sprintf(p, "**:"); 375 - 376 - if (tm.tm_min <= 59) 377 - p += sprintf(p, "%02d\n", tm.tm_min); 378 - else 379 - p += sprintf(p, "**\n"); 380 - 381 - month = rtc_read(RTC_MONTH); 382 - p += sprintf(p, 383 - "oscillator\t: %s\n" 384 - "square_wave\t: %s\n", 385 - (month & RTC_EOSC) ? "disabled" : "enabled", 386 - (month & RTC_ESQW) ? "disabled" : "enabled"); 387 - 388 - amode = ((rtc_read(RTC_MINUTES_ALARM) & 0x80) >> 5) | 389 - ((rtc_read(RTC_HOURS_ALARM) & 0x80) >> 6) | 390 - ((rtc_read(RTC_DAY_ALARM) & 0x80) >> 7); 391 - if (amode == 7) s = "each minute"; 392 - else if (amode == 3) s = "minutes match"; 393 - else if (amode == 1) s = "hours and minutes match"; 394 - else if (amode == 0) s = "days, hours and minutes match"; 395 - else s = "invalid"; 396 - p += sprintf(p, "alarm_mode\t: %s\n", s); 397 - 398 - cmd = rtc_read(RTC_CMD); 399 - p += sprintf(p, 400 - "alarm_enable\t: %s\n" 401 - "wdog_alarm\t: %s\n" 402 - "alarm_mask\t: %s\n" 403 - "wdog_alarm_mask\t: %s\n" 404 - "interrupt_mode\t: %s\n" 405 - "INTB_mode\t: %s_active\n" 406 - "interrupt_pins\t: %s\n", 407 - (cmd & RTC_TDF) ? "yes" : "no", 408 - (cmd & RTC_WAF) ? "yes" : "no", 409 - (cmd & RTC_TDM) ? "disabled" : "enabled", 410 - (cmd & RTC_WAM) ? "disabled" : "enabled", 411 - (cmd & RTC_PU_LVL) ? "pulse" : "level", 412 - (cmd & RTC_IBH_LO) ? "low" : "high", 413 - (cmd & RTC_IPSW) ? "unswapped" : "swapped"); 414 - 415 - return p - buf; 416 - } 417 - 418 - static int ds1286_read_proc(char *page, char **start, off_t off, 419 - int count, int *eof, void *data) 420 - { 421 - int len = ds1286_proc_output (page); 422 - if (len <= off+count) *eof = 1; 423 - *start = page + off; 424 - len -= off; 425 - if (len>count) 426 - len = count; 427 - if (len<0) 428 - len = 0; 429 - 430 - return len; 431 - } 432 - 433 - /* 434 - * Returns true if a clock update is in progress 435 - */ 436 - static inline unsigned char ds1286_is_updating(void) 437 - { 438 - return rtc_read(RTC_CMD) & RTC_TE; 439 - } 440 - 441 - 442 - static void ds1286_get_time(struct rtc_time *rtc_tm) 443 - { 444 - unsigned char save_control; 445 - unsigned long flags; 446 - 447 - /* 448 - * read RTC once any update in progress is done. The update 449 - * can take just over 2ms. We wait 10 to 20ms. There is no need to 450 - * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP. 451 - * If you need to know *exactly* when a second has started, enable 452 - * periodic update complete interrupts, (via ioctl) and then 453 - * immediately read /dev/rtc which will block until you get the IRQ. 454 - * Once the read clears, read the RTC time (again via ioctl). Easy. 455 - */ 456 - 457 - if (ds1286_is_updating() != 0) 458 - msleep(20); 459 - 460 - /* 461 - * Only the values that we read from the RTC are set. We leave 462 - * tm_wday, tm_yday and tm_isdst untouched. Even though the 463 - * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated 464 - * by the RTC when initially set to a non-zero value. 465 - */ 466 - spin_lock_irqsave(&ds1286_lock, flags); 467 - save_control = rtc_read(RTC_CMD); 468 - rtc_write((save_control|RTC_TE), RTC_CMD); 469 - 470 - rtc_tm->tm_sec = rtc_read(RTC_SECONDS); 471 - rtc_tm->tm_min = rtc_read(RTC_MINUTES); 472 - rtc_tm->tm_hour = rtc_read(RTC_HOURS) & 0x3f; 473 - rtc_tm->tm_mday = rtc_read(RTC_DATE); 474 - rtc_tm->tm_mon = rtc_read(RTC_MONTH) & 0x1f; 475 - rtc_tm->tm_year = rtc_read(RTC_YEAR); 476 - 477 - rtc_write(save_control, RTC_CMD); 478 - spin_unlock_irqrestore(&ds1286_lock, flags); 479 - 480 - rtc_tm->tm_sec = bcd2bin(rtc_tm->tm_sec); 481 - rtc_tm->tm_min = bcd2bin(rtc_tm->tm_min); 482 - rtc_tm->tm_hour = bcd2bin(rtc_tm->tm_hour); 483 - rtc_tm->tm_mday = bcd2bin(rtc_tm->tm_mday); 484 - rtc_tm->tm_mon = bcd2bin(rtc_tm->tm_mon); 485 - rtc_tm->tm_year = bcd2bin(rtc_tm->tm_year); 486 - 487 - /* 488 - * Account for differences between how the RTC uses the values 489 - * and how they are defined in a struct rtc_time; 490 - */ 491 - if (rtc_tm->tm_year < 45) 492 - rtc_tm->tm_year += 30; 493 - if ((rtc_tm->tm_year += 40) < 70) 494 - rtc_tm->tm_year += 100; 495 - 496 - rtc_tm->tm_mon--; 497 - } 498 - 499 - static int ds1286_set_time(struct rtc_time *rtc_tm) 500 - { 501 - unsigned char mon, day, hrs, min, sec, leap_yr; 502 - unsigned char save_control; 503 - unsigned int yrs; 504 - unsigned long flags; 505 - 506 - 507 - yrs = rtc_tm->tm_year + 1900; 508 - mon = rtc_tm->tm_mon + 1; /* tm_mon starts at zero */ 509 - day = rtc_tm->tm_mday; 510 - hrs = rtc_tm->tm_hour; 511 - min = rtc_tm->tm_min; 512 - sec = rtc_tm->tm_sec; 513 - 514 - if (yrs < 1970) 515 - return -EINVAL; 516 - 517 - leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400)); 518 - 519 - if ((mon > 12) || (day == 0)) 520 - return -EINVAL; 521 - 522 - if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr))) 523 - return -EINVAL; 524 - 525 - if ((hrs >= 24) || (min >= 60) || (sec >= 60)) 526 - return -EINVAL; 527 - 528 - if ((yrs -= 1940) > 255) /* They are unsigned */ 529 - return -EINVAL; 530 - 531 - if (yrs >= 100) 532 - yrs -= 100; 533 - 534 - sec = bin2bcd(sec); 535 - min = bin2bcd(min); 536 - hrs = bin2bcd(hrs); 537 - day = bin2bcd(day); 538 - mon = bin2bcd(mon); 539 - yrs = bin2bcd(yrs); 540 - 541 - spin_lock_irqsave(&ds1286_lock, flags); 542 - save_control = rtc_read(RTC_CMD); 543 - rtc_write((save_control|RTC_TE), RTC_CMD); 544 - 545 - rtc_write(yrs, RTC_YEAR); 546 - rtc_write(mon, RTC_MONTH); 547 - rtc_write(day, RTC_DATE); 548 - rtc_write(hrs, RTC_HOURS); 549 - rtc_write(min, RTC_MINUTES); 550 - rtc_write(sec, RTC_SECONDS); 551 - rtc_write(0, RTC_HUNDREDTH_SECOND); 552 - 553 - rtc_write(save_control, RTC_CMD); 554 - spin_unlock_irqrestore(&ds1286_lock, flags); 555 - 556 - return 0; 557 - } 558 - 559 - static void ds1286_get_alm_time(struct rtc_time *alm_tm) 560 - { 561 - unsigned char cmd; 562 - unsigned long flags; 563 - 564 - /* 565 - * Only the values that we read from the RTC are set. That 566 - * means only tm_wday, tm_hour, tm_min. 567 - */ 568 - spin_lock_irqsave(&ds1286_lock, flags); 569 - alm_tm->tm_min = rtc_read(RTC_MINUTES_ALARM) & 0x7f; 570 - alm_tm->tm_hour = rtc_read(RTC_HOURS_ALARM) & 0x1f; 571 - alm_tm->tm_wday = rtc_read(RTC_DAY_ALARM) & 0x07; 572 - cmd = rtc_read(RTC_CMD); 573 - spin_unlock_irqrestore(&ds1286_lock, flags); 574 - 575 - alm_tm->tm_min = bcd2bin(alm_tm->tm_min); 576 - alm_tm->tm_hour = bcd2bin(alm_tm->tm_hour); 577 - alm_tm->tm_sec = 0; 578 - } 579 - 580 - module_init(ds1286_init); 581 - module_exit(ds1286_exit); 582 - 583 - MODULE_AUTHOR("Ralf Baechle"); 584 - MODULE_LICENSE("GPL"); 585 - MODULE_ALIAS_MISCDEV(RTC_MINOR);