Lines Matching +full:start +full:- +full:year

2  * CDDL HEADER START
83 static int instance = -1;
124 0, /* refcnt - reference cnt always set to 0 */
125 todds1337_getinfo, /* getinfo - Maybe requred */
131 &ds1337_cbops, /* cb_ops - ds1337 does not need this(?) */
244 if (instance != -1) { in todds1337_attach()
257 instance = -1; in todds1337_attach()
265 instance = -1; in todds1337_attach()
269 statep->dip = dip; in todds1337_attach()
271 if (i2c_client_register(dip, &statep->ds1337_i2c_hdl) != I2C_SUCCESS) { in todds1337_attach()
275 instance = -1; in todds1337_attach()
281 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_attach()
283 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_attach()
284 i2c_tp->i2c_flags = I2C_WR_RD; in todds1337_attach()
285 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_STATUS; /* Read Status register */ in todds1337_attach()
286 i2c_tp->i2c_wlen = 1; in todds1337_attach()
287 i2c_tp->i2c_rlen = 1; in todds1337_attach()
289 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_attach()
290 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_attach()
291 i2c_client_unregister(statep->ds1337_i2c_hdl); in todds1337_attach()
295 instance = -1; in todds1337_attach()
299 tempVal = i2c_tp->i2c_rbuf[0]; in todds1337_attach()
301 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_attach()
308 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, &i2c_tp, in todds1337_attach()
310 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_attach()
311 i2c_tp->i2c_flags = I2C_WR; in todds1337_attach()
312 i2c_tp->i2c_wbuf[0] = RTC_CTL; /* Write Control register */ in todds1337_attach()
313 i2c_tp->i2c_wbuf[1] = (uchar_t)(RTC_CTL_RS2 | RTC_CTL_RS1 | in todds1337_attach()
315 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) in todds1337_attach()
317 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, in todds1337_attach()
319 i2c_client_unregister(statep->ds1337_i2c_hdl); in todds1337_attach()
323 instance = -1; in todds1337_attach()
327 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_attach()
332 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, &i2c_tp, in todds1337_attach()
334 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_attach()
335 i2c_tp->i2c_flags = I2C_WR; in todds1337_attach()
336 i2c_tp->i2c_wbuf[0] = RTC_STATUS; in todds1337_attach()
337 i2c_tp->i2c_wbuf[1] = (uchar_t)0; in todds1337_attach()
338 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) in todds1337_attach()
340 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, in todds1337_attach()
342 i2c_client_unregister(statep->ds1337_i2c_hdl); in todds1337_attach()
346 instance = -1; in todds1337_attach()
350 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_attach()
356 ASSERT(statep->cycid == NULL); in todds1337_attach()
357 statep->cycid = ddi_periodic_add(todds1337_cyclic, &soft_rtc, in todds1337_attach()
359 statep->state = TOD_ATTACHED; in todds1337_attach()
412 * 00 - 68 = 2000 thru 2068 in todds1337_get()
413 * 69-99 = 1969 thru 1999 in todds1337_get()
436 * chip supports date from 1969-2068 only. We must
444 int year; in todds1337_set() local
450 * Year is base 1900, valid year range 1969-2068 in todds1337_set()
455 year = tod.tod_year; in todds1337_set()
456 if (year >= 100) in todds1337_set()
457 year -= 100; in todds1337_set()
459 rtc.rtc_year = (uint8_t)year; in todds1337_set()
502 * have non-interlsecting registers, it is safe to use different locks. in todds1337_set_power_alarm()
510 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_set_power_alarm()
512 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_set_power_alarm()
513 i2c_tp->i2c_flags = I2C_WR_RD; in todds1337_set_power_alarm()
514 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_CTL; /* Read Control register */ in todds1337_set_power_alarm()
516 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_set_power_alarm()
517 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
525 tmpval = i2c_tp->i2c_rbuf[0]; in todds1337_set_power_alarm()
527 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
529 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_set_power_alarm()
531 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_set_power_alarm()
532 i2c_tp->i2c_flags = I2C_WR; in todds1337_set_power_alarm()
533 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_CTL; /* Write Control register */ in todds1337_set_power_alarm()
534 i2c_tp->i2c_wbuf[1] = tmpval & ~RTC_CTL_A1IE; in todds1337_set_power_alarm()
536 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_set_power_alarm()
537 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
545 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
552 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_set_power_alarm()
554 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_set_power_alarm()
555 i2c_tp->i2c_flags = I2C_WR; in todds1337_set_power_alarm()
556 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_ALARM_SEC; /* Alarm #1 Seconds */ in todds1337_set_power_alarm()
557 i2c_tp->i2c_wbuf[1] = BYTE_TO_BCD(tod.tod_sec); in todds1337_set_power_alarm()
558 i2c_tp->i2c_wbuf[2] = BYTE_TO_BCD(tod.tod_min); in todds1337_set_power_alarm()
559 i2c_tp->i2c_wbuf[3] = BYTE_TO_BCD(tod.tod_hour); in todds1337_set_power_alarm()
560 i2c_tp->i2c_wbuf[4] = BYTE_TO_BCD(tod.tod_day); in todds1337_set_power_alarm()
562 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_set_power_alarm()
563 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
571 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
577 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_set_power_alarm()
579 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_set_power_alarm()
580 i2c_tp->i2c_flags = I2C_WR; in todds1337_set_power_alarm()
581 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_CTL; /* Write Control register */ in todds1337_set_power_alarm()
582 i2c_tp->i2c_wbuf[1] = tmpval | RTC_CTL_A1IE; in todds1337_set_power_alarm()
584 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_set_power_alarm()
585 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
593 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_set_power_alarm()
624 * have non-interlsecting registers, it is safe to use different locks. in todds1337_clear_power_alarm()
632 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_clear_power_alarm()
634 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_clear_power_alarm()
635 i2c_tp->i2c_flags = I2C_WR_RD; in todds1337_clear_power_alarm()
636 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_CTL; /* Read Control register */ in todds1337_clear_power_alarm()
638 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_clear_power_alarm()
639 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
647 tmpval = i2c_tp->i2c_rbuf[0]; in todds1337_clear_power_alarm()
649 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
651 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_clear_power_alarm()
653 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_clear_power_alarm()
654 i2c_tp->i2c_flags = I2C_WR; in todds1337_clear_power_alarm()
655 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_CTL; /* Write Control register */ in todds1337_clear_power_alarm()
656 i2c_tp->i2c_wbuf[1] = tmpval & ~RTC_CTL_A1IE; in todds1337_clear_power_alarm()
658 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_clear_power_alarm()
659 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
667 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
672 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_clear_power_alarm()
674 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_clear_power_alarm()
675 i2c_tp->i2c_flags = I2C_WR_RD; in todds1337_clear_power_alarm()
676 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_STATUS; /* Read Status register */ in todds1337_clear_power_alarm()
678 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_clear_power_alarm()
679 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
687 tmpval = i2c_tp->i2c_rbuf[0]; in todds1337_clear_power_alarm()
689 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
691 (void) i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_clear_power_alarm()
693 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_clear_power_alarm()
694 i2c_tp->i2c_flags = I2C_WR; in todds1337_clear_power_alarm()
695 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_STATUS; /* Write Status register */ in todds1337_clear_power_alarm()
696 i2c_tp->i2c_wbuf[1] = tmpval & ~RTC_STATUS_A1F; in todds1337_clear_power_alarm()
698 if ((i2c_transfer(statep->ds1337_i2c_hdl, i2c_tp)) != I2C_SUCCESS) { in todds1337_clear_power_alarm()
699 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
707 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_clear_power_alarm()
731 static char tod_read[7] = {-1, -1, -1, -1, -1, -1, -1};
754 * to accomodate sec, min, hrs, dayOfWeek, dayOfMonth, year in todds1337_read_rtc()
756 if ((i2c_transfer_alloc(statep->ds1337_i2c_hdl, &i2c_tp, 1, in todds1337_read_rtc()
763 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_read_rtc()
764 i2c_tp->i2c_flags = I2C_WR_RD; in todds1337_read_rtc()
765 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_SEC; /* Start from 0x00 */ in todds1337_read_rtc()
766 i2c_tp->i2c_wlen = 1; /* Write one byte address */ in todds1337_read_rtc()
767 i2c_tp->i2c_rlen = 7; /* Read 7 regs */ in todds1337_read_rtc()
769 if ((i2c_cmd_status = i2c_transfer(statep->ds1337_i2c_hdl, in todds1337_read_rtc()
774 while (tod_read[0] == -1 && counter > 0) { in todds1337_read_rtc()
776 bcopy(i2c_tp->i2c_rbuf, tod_read, 7); in todds1337_read_rtc()
779 /* Start reading reg from 0x00 */ in todds1337_read_rtc()
780 i2c_tp->i2c_wbuf[0] = (uchar_t)0x00; in todds1337_read_rtc()
781 i2c_tp->i2c_wlen = 1; /* Write one byte address */ in todds1337_read_rtc()
782 i2c_tp->i2c_rlen = 7; /* Read 7 regs */ in todds1337_read_rtc()
783 if ((i2c_cmd_status = i2c_transfer(statep->ds1337_i2c_hdl, in todds1337_read_rtc()
788 if (bcmp(tod_read, i2c_tp->i2c_rbuf, 7) != 0) { in todds1337_read_rtc()
789 tod_read[0] = -1; in todds1337_read_rtc()
790 counter--; in todds1337_read_rtc()
794 } while (i2c_tp->i2c_rbuf[0] == 0x59 && in todds1337_read_rtc()
796 bcmp(&tod_read[1], &i2c_tp->i2c_rbuf[1], 6) != 0 && in todds1337_read_rtc()
797 counter-- > 0); in todds1337_read_rtc()
803 bcopy(i2c_tp->i2c_rbuf, tod_read, 7); in todds1337_read_rtc()
806 rtc->rtc_year = BCD_TO_BYTE(i2c_tp->i2c_rbuf[6]); in todds1337_read_rtc()
807 rtc->rtc_mon = BCD_TO_BYTE(i2c_tp->i2c_rbuf[5]); in todds1337_read_rtc()
808 rtc->rtc_dom = BCD_TO_BYTE(i2c_tp->i2c_rbuf[4]); in todds1337_read_rtc()
809 rtc->rtc_dow = BCD_TO_BYTE(i2c_tp->i2c_rbuf[3]); in todds1337_read_rtc()
810 rtc->rtc_hrs = BCD_TO_BYTE(i2c_tp->i2c_rbuf[2]); in todds1337_read_rtc()
811 rtc->rtc_min = BCD_TO_BYTE(i2c_tp->i2c_rbuf[1]); in todds1337_read_rtc()
812 rtc->rtc_sec = BCD_TO_BYTE(i2c_tp->i2c_rbuf[0]); in todds1337_read_rtc()
815 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_read_rtc()
839 if ((i2c_cmd_status = i2c_transfer_alloc(statep->ds1337_i2c_hdl, in todds1337_write_rtc()
844 i2c_tp->i2c_version = I2C_XFER_REV; in todds1337_write_rtc()
845 i2c_tp->i2c_flags = I2C_WR; in todds1337_write_rtc()
846 i2c_tp->i2c_wbuf[0] = (uchar_t)RTC_SEC; in todds1337_write_rtc()
847 i2c_tp->i2c_wbuf[1] = BYTE_TO_BCD(rtc->rtc_sec); in todds1337_write_rtc()
848 i2c_tp->i2c_wbuf[2] = BYTE_TO_BCD(rtc->rtc_min); in todds1337_write_rtc()
849 i2c_tp->i2c_wbuf[3] = BYTE_TO_BCD(rtc->rtc_hrs); in todds1337_write_rtc()
850 i2c_tp->i2c_wbuf[4] = BYTE_TO_BCD(rtc->rtc_dow); in todds1337_write_rtc()
851 i2c_tp->i2c_wbuf[5] = BYTE_TO_BCD(rtc->rtc_dom); in todds1337_write_rtc()
852 i2c_tp->i2c_wbuf[6] = BYTE_TO_BCD(rtc->rtc_mon); in todds1337_write_rtc()
853 i2c_tp->i2c_wbuf[7] = BYTE_TO_BCD(rtc->rtc_year); in todds1337_write_rtc()
854 i2c_tp->i2c_wlen = 8; in todds1337_write_rtc()
856 if ((i2c_cmd_status = i2c_transfer(statep->ds1337_i2c_hdl, in todds1337_write_rtc()
858 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_write_rtc()
862 tod_read[0] = -1; /* invalidate saved data from read routine */ in todds1337_write_rtc()
864 (void) i2c_transfer_free(statep->ds1337_i2c_hdl, i2c_tp); in todds1337_write_rtc()
877 if (instance == -1) { in todds1337_getinfo()
886 *result = (void *)softsp->dip; in todds1337_getinfo()
898 * execute the get-time method
941 * Read the date using "get-time" method in rtc node
942 * PROM returns 1969-1999 when reading 69-99 and
943 * 2000-2068 when reading 00-68
948 int year; in todds1337_prom_getdate() local
951 ci[0] = p1275_ptr2cell("call-method"); /* Service name */ in todds1337_prom_getdate()
954 ci[3] = p1275_ptr2cell("get-time"); in todds1337_prom_getdate()
961 year = p1275_cell2int(ci[6]); in todds1337_prom_getdate()
962 rtc->rtc_mon = p1275_cell2int(ci[7]); in todds1337_prom_getdate()
963 rtc->rtc_dom = p1275_cell2int(ci[8]); in todds1337_prom_getdate()
964 rtc->rtc_dow = 0; in todds1337_prom_getdate()
965 rtc->rtc_hrs = p1275_cell2int(ci[9]); in todds1337_prom_getdate()
966 rtc->rtc_min = p1275_cell2int(ci[10]); in todds1337_prom_getdate()
967 rtc->rtc_sec = p1275_cell2int(ci[11]); in todds1337_prom_getdate()
968 if (year >= 2000) in todds1337_prom_getdate()
969 year -= 2000; in todds1337_prom_getdate()
971 year -= 1900; in todds1337_prom_getdate()
972 rtc->rtc_year = year; in todds1337_prom_getdate()
978 * Read the date using "set-time" method in rtc node
979 * For values 00 - 68, write 2000-2068, and for 69-99,
980 * write 1969-1999
985 int year; in todds1337_prom_setdate() local
988 year = rtc->rtc_year; in todds1337_prom_setdate()
990 if ((year < 0) || (year > 99)) in todds1337_prom_setdate()
993 if (year <= 68) in todds1337_prom_setdate()
994 year = rtc->rtc_year + 2000; in todds1337_prom_setdate()
996 year = rtc->rtc_year + 1900; in todds1337_prom_setdate()
998 ci[0] = p1275_ptr2cell("call-method"); /* Service name */ in todds1337_prom_setdate()
1001 ci[3] = p1275_ptr2cell("set-time"); in todds1337_prom_setdate()
1003 ci[5] = p1275_int2cell(year); in todds1337_prom_setdate()
1004 ci[6] = p1275_int2cell(rtc->rtc_mon); in todds1337_prom_setdate()
1005 ci[7] = p1275_int2cell(rtc->rtc_dom); in todds1337_prom_setdate()
1006 ci[8] = p1275_int2cell(rtc->rtc_hrs); in todds1337_prom_setdate()
1007 ci[9] = p1275_int2cell(rtc->rtc_min); in todds1337_prom_setdate()
1008 ci[10] = p1275_int2cell(rtc->rtc_sec); in todds1337_prom_setdate()