Lines Matching +full:dev +full:- +full:ctrl

25 /*---------------------------------------------------------------------*/
33 /*---------------------------------------------------------------------*/
93 static int rx8010sj_rtc_read8(DEV_TYPE *dev, unsigned int reg) in rx8010sj_rtc_read8() argument
99 ret = dm_i2c_read(dev, reg, &val, sizeof(val)); in rx8010sj_rtc_read8()
101 ret = i2c_read(dev->chip, reg, 1, &val, 1); in rx8010sj_rtc_read8()
107 static int rx8010sj_rtc_write8(DEV_TYPE *dev, unsigned int reg, int val) in rx8010sj_rtc_write8() argument
113 ret = dm_i2c_write(dev, reg, &lval, 1); in rx8010sj_rtc_write8()
115 ret = i2c_write(dev->chip, reg, 1, &lval, 1); in rx8010sj_rtc_write8()
123 if ((tm->tm_year < 2000) || (tm->tm_year > 2099)) in validate_time()
124 return -EINVAL; in validate_time()
126 if ((tm->tm_mon < 1) || (tm->tm_mon > 12)) in validate_time()
127 return -EINVAL; in validate_time()
129 if ((tm->tm_mday < 1) || (tm->tm_mday > 31)) in validate_time()
130 return -EINVAL; in validate_time()
132 if ((tm->tm_wday < 0) || (tm->tm_wday > 6)) in validate_time()
133 return -EINVAL; in validate_time()
135 if ((tm->tm_hour < 0) || (tm->tm_hour > 23)) in validate_time()
136 return -EINVAL; in validate_time()
138 if ((tm->tm_min < 0) || (tm->tm_min > 59)) in validate_time()
139 return -EINVAL; in validate_time()
141 if ((tm->tm_sec < 0) || (tm->tm_sec > 59)) in validate_time()
142 return -EINVAL; in validate_time()
147 void rx8010sj_rtc_init(DEV_TYPE *dev) in rx8010sj_rtc_init() argument
149 u8 ctrl[2]; in rx8010sj_rtc_init() local
153 ret = rx8010sj_rtc_write8(dev, RX8010_RESV17, 0xD8); in rx8010sj_rtc_init()
157 ret = rx8010sj_rtc_write8(dev, RX8010_RESV30, 0x00); in rx8010sj_rtc_init()
161 ret = rx8010sj_rtc_write8(dev, RX8010_RESV31, 0x08); in rx8010sj_rtc_init()
165 ret = rx8010sj_rtc_write8(dev, RX8010_IRQ, 0x00); in rx8010sj_rtc_init()
170 ret = rx8010sj_rtc_read8(dev, RX8010_FLAG + i); in rx8010sj_rtc_init()
174 ctrl[i] = ret; in rx8010sj_rtc_init()
177 if (ctrl[0] & RX8010_FLAG_VLF) in rx8010sj_rtc_init()
180 if (ctrl[0] & RX8010_FLAG_AF) { in rx8010sj_rtc_init()
185 if (ctrl[0] & RX8010_FLAG_TF) in rx8010sj_rtc_init()
188 if (ctrl[0] & RX8010_FLAG_UF) in rx8010sj_rtc_init()
192 ctrl[0] &= ~(RX8010_FLAG_AF | RX8010_FLAG_TF | RX8010_FLAG_UF); in rx8010sj_rtc_init()
193 ret = rx8010sj_rtc_write8(dev, RX8010_FLAG, ctrl[0]); in rx8010sj_rtc_init()
205 static int rx8010sj_rtc_get(DEV_TYPE *dev, struct rtc_time *tmp) in rx8010sj_rtc_get() argument
211 flagreg = rx8010sj_rtc_read8(dev, RX8010_FLAG); in rx8010sj_rtc_get()
214 return -EIO; in rx8010sj_rtc_get()
219 return -EINVAL; in rx8010sj_rtc_get()
223 ret = rx8010sj_rtc_read8(dev, RX8010_SEC + i); in rx8010sj_rtc_get()
226 return -EIO; in rx8010sj_rtc_get()
231 tmp->tm_sec = bcd2bin(date[RX8010_SEC - RX8010_SEC] & 0x7f); in rx8010sj_rtc_get()
232 tmp->tm_min = bcd2bin(date[RX8010_MIN - RX8010_SEC] & 0x7f); in rx8010sj_rtc_get()
233 tmp->tm_hour = bcd2bin(date[RX8010_HOUR - RX8010_SEC] & 0x3f); in rx8010sj_rtc_get()
234 tmp->tm_mday = bcd2bin(date[RX8010_MDAY - RX8010_SEC] & 0x3f); in rx8010sj_rtc_get()
235 tmp->tm_mon = bcd2bin(date[RX8010_MONTH - RX8010_SEC] & 0x1f); in rx8010sj_rtc_get()
236 tmp->tm_year = bcd2bin(date[RX8010_YEAR - RX8010_SEC]) + 2000; in rx8010sj_rtc_get()
237 tmp->tm_wday = 0; in rx8010sj_rtc_get()
238 tmp->tm_yday = 0; in rx8010sj_rtc_get()
239 tmp->tm_isdst = 0; in rx8010sj_rtc_get()
241 DEBUGR("Get DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d\n", in rx8010sj_rtc_get()
242 tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, in rx8010sj_rtc_get()
243 tmp->tm_hour, tmp->tm_min, tmp->tm_sec); in rx8010sj_rtc_get()
249 static int rx8010sj_rtc_set(DEV_TYPE *dev, const struct rtc_time *tm) in rx8010sj_rtc_set() argument
252 int ctrl, flagreg; in rx8010sj_rtc_set() local
257 return -EINVAL; in rx8010sj_rtc_set()
260 ctrl = rx8010sj_rtc_read8(dev, RX8010_CTRL); in rx8010sj_rtc_set()
261 if (ctrl < 0) in rx8010sj_rtc_set()
262 return ctrl; in rx8010sj_rtc_set()
263 ret = rx8010sj_rtc_write8(dev, RX8010_CTRL, ctrl | RX8010_CTRL_STOP); in rx8010sj_rtc_set()
267 date[RX8010_SEC - RX8010_SEC] = bin2bcd(tm->tm_sec); in rx8010sj_rtc_set()
268 date[RX8010_MIN - RX8010_SEC] = bin2bcd(tm->tm_min); in rx8010sj_rtc_set()
269 date[RX8010_HOUR - RX8010_SEC] = bin2bcd(tm->tm_hour); in rx8010sj_rtc_set()
270 date[RX8010_MDAY - RX8010_SEC] = bin2bcd(tm->tm_mday); in rx8010sj_rtc_set()
271 date[RX8010_MONTH - RX8010_SEC] = bin2bcd(tm->tm_mon); in rx8010sj_rtc_set()
272 date[RX8010_YEAR - RX8010_SEC] = bin2bcd(tm->tm_year - 2000); in rx8010sj_rtc_set()
273 date[RX8010_WDAY - RX8010_SEC] = bin2bcd(tm->tm_wday); in rx8010sj_rtc_set()
276 ret = rx8010sj_rtc_write8(dev, RX8010_SEC + i, date[i]); in rx8010sj_rtc_set()
279 return -EIO; in rx8010sj_rtc_set()
284 ctrl = rx8010sj_rtc_read8(dev, RX8010_CTRL); in rx8010sj_rtc_set()
285 if (ctrl < 0) in rx8010sj_rtc_set()
286 return ctrl; in rx8010sj_rtc_set()
288 ret = rx8010sj_rtc_write8(dev, RX8010_CTRL, ctrl & ~RX8010_CTRL_STOP); in rx8010sj_rtc_set()
292 flagreg = rx8010sj_rtc_read8(dev, RX8010_FLAG); in rx8010sj_rtc_set()
297 ret = rx8010sj_rtc_write8(dev, RX8010_FLAG, in rx8010sj_rtc_set()
304 static int rx8010sj_rtc_reset(DEV_TYPE *dev) in rx8010sj_rtc_reset() argument
314 struct ludevice dev = { in rtc_get() local
318 return rx8010sj_rtc_get(&dev, tm); in rtc_get()
323 struct ludevice dev = { in rtc_set() local
327 return rx8010sj_rtc_set(&dev, tm); in rtc_set()
332 struct ludevice dev = { in rtc_reset() local
336 rx8010sj_rtc_reset(&dev); in rtc_reset()
341 struct ludevice dev = { in rtc_init() local
345 rx8010sj_rtc_init(&dev); in rtc_init()
350 static int rx8010sj_probe(struct udevice *dev) in rx8010sj_probe() argument
352 rx8010sj_rtc_init(&dev); in rx8010sj_probe()
366 { .compatible = "epson,rx8010sj-rtc" },