Lines Matching +full:quartz +full:- +full:load +full:- +full:femtofarads
15 #define DRIVER_NAME "rtc-pcf8523"
23 #define REG_CONTROL3_PM_VDD (1 << 6) /* switch-over disabled */
26 #define REG_CONTROL3_BLF (1 << 2) /* battery low bit, read-only */
51 msgs[0].addr = client->addr; in pcf8523_read()
56 msgs[1].addr = client->addr; in pcf8523_read()
61 err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in pcf8523_read()
76 msg.addr = client->addr; in pcf8523_write()
81 err = i2c_transfer(client->adapter, &msg, 1); in pcf8523_write()
102 u32 load; in pcf8523_load_capacitance() local
110 load = 12500; in pcf8523_load_capacitance()
111 of_property_read_u32(client->dev.of_node, "quartz-load-femtofarads", in pcf8523_load_capacitance()
112 &load); in pcf8523_load_capacitance()
114 switch (load) { in pcf8523_load_capacitance()
116 dev_warn(&client->dev, "Unknown quartz-load-femtofarads value: %d. Assuming 12500", in pcf8523_load_capacitance()
117 load); in pcf8523_load_capacitance()
198 return -EINVAL; in pcf8523_rtc_read_time()
201 msgs[0].addr = client->addr; in pcf8523_rtc_read_time()
206 msgs[1].addr = client->addr; in pcf8523_rtc_read_time()
211 err = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs)); in pcf8523_rtc_read_time()
216 return -EINVAL; in pcf8523_rtc_read_time()
218 tm->tm_sec = bcd2bin(regs[0] & 0x7f); in pcf8523_rtc_read_time()
219 tm->tm_min = bcd2bin(regs[1] & 0x7f); in pcf8523_rtc_read_time()
220 tm->tm_hour = bcd2bin(regs[2] & 0x3f); in pcf8523_rtc_read_time()
221 tm->tm_mday = bcd2bin(regs[3] & 0x3f); in pcf8523_rtc_read_time()
222 tm->tm_wday = regs[4] & 0x7; in pcf8523_rtc_read_time()
223 tm->tm_mon = bcd2bin(regs[5] & 0x1f) - 1; in pcf8523_rtc_read_time()
224 tm->tm_year = bcd2bin(regs[6]) + 100; in pcf8523_rtc_read_time()
239 * After 2100-02-28 we could start interpreting the year to be in the in pcf8523_rtc_set_time()
241 * because the chip handles YEAR=0x00 (and the out-of-spec in pcf8523_rtc_set_time()
244 if (tm->tm_year < 100 || tm->tm_year >= 200) in pcf8523_rtc_set_time()
245 return -EINVAL; in pcf8523_rtc_set_time()
253 regs[1] = bin2bcd(tm->tm_sec); in pcf8523_rtc_set_time()
254 regs[2] = bin2bcd(tm->tm_min); in pcf8523_rtc_set_time()
255 regs[3] = bin2bcd(tm->tm_hour); in pcf8523_rtc_set_time()
256 regs[4] = bin2bcd(tm->tm_mday); in pcf8523_rtc_set_time()
257 regs[5] = tm->tm_wday; in pcf8523_rtc_set_time()
258 regs[6] = bin2bcd(tm->tm_mon + 1); in pcf8523_rtc_set_time()
259 regs[7] = bin2bcd(tm->tm_year - 100); in pcf8523_rtc_set_time()
261 msg.addr = client->addr; in pcf8523_rtc_set_time()
266 err = i2c_transfer(client->adapter, &msg, 1); in pcf8523_rtc_set_time()
294 return -EFAULT; in pcf8523_rtc_ioctl()
298 return -ENOIOCTLCMD; in pcf8523_rtc_ioctl()
316 /* sign extend the 7-bit offset value */ in pcf8523_rtc_read_offset()
329 reg_m0 = clamp(DIV_ROUND_CLOSEST(offset, 4340), -64L, 63L); in pcf8523_rtc_set_offset()
330 reg_m1 = clamp(DIV_ROUND_CLOSEST(offset, 4069), -64L, 63L); in pcf8523_rtc_set_offset()
332 if (abs(reg_m0 * 4340 - offset) < abs(reg_m1 * 4069 - offset)) in pcf8523_rtc_set_offset()
354 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) in pcf8523_probe()
355 return -ENODEV; in pcf8523_probe()
357 pcf = devm_kzalloc(&client->dev, sizeof(*pcf), GFP_KERNEL); in pcf8523_probe()
359 return -ENOMEM; in pcf8523_probe()
363 dev_warn(&client->dev, "failed to set xtal load capacitance: %d", in pcf8523_probe()
370 pcf->rtc = devm_rtc_device_register(&client->dev, DRIVER_NAME, in pcf8523_probe()
372 if (IS_ERR(pcf->rtc)) in pcf8523_probe()
373 return PTR_ERR(pcf->rtc); in pcf8523_probe()
404 MODULE_AUTHOR("Thierry Reding <thierry.reding@avionic-design.de>");