aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc
diff options
context:
space:
mode:
authorAlexandre Belloni <alexandre.belloni@free-electrons.com>2015-08-03 18:40:25 -0400
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>2015-09-05 07:19:12 -0400
commitfd9061fb497926c0e62bf1c7ff727801499fd2ea (patch)
tree4aeb266f1a720800ab3b37a6c156e0f62caadec7 /drivers/rtc
parent6f0a8cfebb898b88fb0d934d7a44a6d4c98d5285 (diff)
rtc: rx8025: cleanup accessors
Remove useless error messages, at that point, the user already knows something went wrong but will not be able to do anything about it anyway. It is also highly unlikely that some registers are readable/writable but not some other ones. Also, transform rx8025_read_reg to be more resemblant to i2c_smbus_read_byte_data() Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-rx8025.c85
1 files changed, 31 insertions, 54 deletions
diff --git a/drivers/rtc/rtc-rx8025.c b/drivers/rtc/rtc-rx8025.c
index d158a640299e..bf96f40fd200 100644
--- a/drivers/rtc/rtc-rx8025.c
+++ b/drivers/rtc/rtc-rx8025.c
@@ -75,65 +75,43 @@ struct rx8025_data {
75 u8 ctrl1; 75 u8 ctrl1;
76}; 76};
77 77
78static int rx8025_read_reg(struct i2c_client *client, int number, u8 *value) 78static s32 rx8025_read_reg(const struct i2c_client *client, u8 number)
79{ 79{
80 int ret = i2c_smbus_read_byte_data(client, number << 4); 80 return i2c_smbus_read_byte_data(client, number << 4);
81
82 if (ret < 0) {
83 dev_err(&client->dev, "Unable to read register #%d\n", number);
84 return ret;
85 }
86
87 *value = ret;
88 return 0;
89} 81}
90 82
91static int rx8025_read_regs(struct i2c_client *client, 83static int rx8025_read_regs(const struct i2c_client *client,
92 int number, u8 length, u8 *values) 84 u8 number, u8 length, u8 *values)
93{ 85{
94 int ret = i2c_smbus_read_i2c_block_data(client, number << 4, 86 int ret = i2c_smbus_read_i2c_block_data(client, number << 4, length,
95 length, values); 87 values);
96 88 if (ret != length)
97 if (ret != length) {
98 dev_err(&client->dev, "Unable to read registers #%d..#%d\n",
99 number, number + length - 1);
100 return ret < 0 ? ret : -EIO; 89 return ret < 0 ? ret : -EIO;
101 }
102 90
103 return 0; 91 return 0;
104} 92}
105 93
106static int rx8025_write_reg(struct i2c_client *client, int number, u8 value) 94static s32 rx8025_write_reg(const struct i2c_client *client, u8 number,
95 u8 value)
107{ 96{
108 int ret = i2c_smbus_write_byte_data(client, number << 4, value); 97 return i2c_smbus_write_byte_data(client, number << 4, value);
109
110 if (ret)
111 dev_err(&client->dev, "Unable to write register #%d\n",
112 number);
113
114 return ret;
115} 98}
116 99
117static int rx8025_write_regs(struct i2c_client *client, 100static s32 rx8025_write_regs(const struct i2c_client *client,
118 int number, u8 length, u8 *values) 101 u8 number, u8 length, const u8 *values)
119{ 102{
120 int ret = i2c_smbus_write_i2c_block_data(client, number << 4, 103 return i2c_smbus_write_i2c_block_data(client, number << 4,
121 length, values); 104 length, values);
122
123 if (ret)
124 dev_err(&client->dev, "Unable to write registers #%d..#%d\n",
125 number, number + length - 1);
126
127 return ret;
128} 105}
129 106
130static irqreturn_t rx8025_handle_irq(int irq, void *dev_id) 107static irqreturn_t rx8025_handle_irq(int irq, void *dev_id)
131{ 108{
132 struct i2c_client *client = dev_id; 109 struct i2c_client *client = dev_id;
133 struct rx8025_data *rx8025 = i2c_get_clientdata(client); 110 struct rx8025_data *rx8025 = i2c_get_clientdata(client);
134 u8 status; 111 int status;
135 112
136 if (rx8025_read_reg(client, RX8025_REG_CTRL2, &status)) 113 status = rx8025_read_reg(client, RX8025_REG_CTRL2);
114 if (status < 0)
137 goto out; 115 goto out;
138 116
139 if (!(status & RX8025_BIT_CTRL2_XST)) 117 if (!(status & RX8025_BIT_CTRL2_XST))
@@ -166,12 +144,12 @@ out:
166static int rx8025_get_time(struct device *dev, struct rtc_time *dt) 144static int rx8025_get_time(struct device *dev, struct rtc_time *dt)
167{ 145{
168 struct rx8025_data *rx8025 = dev_get_drvdata(dev); 146 struct rx8025_data *rx8025 = dev_get_drvdata(dev);
169 u8 date[7], ctrl; 147 u8 date[7];
170 int err; 148 int ctrl, err;
171 149
172 err = rx8025_read_reg(rx8025->client, RX8025_REG_CTRL2, &ctrl); 150 ctrl = rx8025_read_reg(rx8025->client, RX8025_REG_CTRL2);
173 if (err) 151 if (ctrl < 0)
174 return err; 152 return ctrl;
175 153
176 if (ctrl & RX8025_BIT_CTRL2_PON) { 154 if (ctrl & RX8025_BIT_CTRL2_PON) {
177 dev_warn(dev, "power-on reset detected, date is invalid\n"); 155 dev_warn(dev, "power-on reset detected, date is invalid\n");
@@ -302,8 +280,8 @@ static int rx8025_read_alarm(struct device *dev, struct rtc_wkalrm *t)
302{ 280{
303 struct rx8025_data *rx8025 = dev_get_drvdata(dev); 281 struct rx8025_data *rx8025 = dev_get_drvdata(dev);
304 struct i2c_client *client = rx8025->client; 282 struct i2c_client *client = rx8025->client;
305 u8 ctrl2, ald[2]; 283 u8 ald[2];
306 int err; 284 int ctrl2, err;
307 285
308 if (client->irq <= 0) 286 if (client->irq <= 0)
309 return -EINVAL; 287 return -EINVAL;
@@ -312,9 +290,9 @@ static int rx8025_read_alarm(struct device *dev, struct rtc_wkalrm *t)
312 if (err) 290 if (err)
313 return err; 291 return err;
314 292
315 err = rx8025_read_reg(client, RX8025_REG_CTRL2, &ctrl2); 293 ctrl2 = rx8025_read_reg(client, RX8025_REG_CTRL2);
316 if (err) 294 if (ctrl2 < 0)
317 return err; 295 return ctrl2;
318 296
319 dev_dbg(dev, "%s: read alarm 0x%02x 0x%02x ctrl2 %02x\n", 297 dev_dbg(dev, "%s: read alarm 0x%02x 0x%02x ctrl2 %02x\n",
320 __func__, ald[0], ald[1], ctrl2); 298 __func__, ald[0], ald[1], ctrl2);
@@ -435,12 +413,11 @@ static struct rtc_class_ops rx8025_rtc_ops = {
435static int rx8025_get_clock_adjust(struct device *dev, int *adj) 413static int rx8025_get_clock_adjust(struct device *dev, int *adj)
436{ 414{
437 struct i2c_client *client = to_i2c_client(dev); 415 struct i2c_client *client = to_i2c_client(dev);
438 u8 digoff; 416 int digoff;
439 int err;
440 417
441 err = rx8025_read_reg(client, RX8025_REG_DIGOFF, &digoff); 418 digoff = rx8025_read_reg(client, RX8025_REG_DIGOFF);
442 if (err) 419 if (digoff < 0)
443 return err; 420 return digoff;
444 421
445 *adj = digoff >= 64 ? digoff - 128 : digoff; 422 *adj = digoff >= 64 ? digoff - 128 : digoff;
446 if (*adj > 0) 423 if (*adj > 0)