1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * ADM1266 - Cascadable Super Sequencer with Margin
4 * Control and Fault Recording
5 *
6 * Copyright 2020 Analog Devices Inc.
7 */
8
9 #include <linux/bitfield.h>
10 #include <linux/crc8.h>
11 #include <linux/debugfs.h>
12 #include <linux/gpio/driver.h>
13 #include <linux/i2c.h>
14 #include <linux/i2c-smbus.h>
15 #include <linux/init.h>
16 #include <linux/kernel.h>
17 #include <linux/module.h>
18 #include <linux/nvmem-consumer.h>
19 #include <linux/nvmem-provider.h>
20 #include "pmbus.h"
21 #include <linux/slab.h>
22 #include <linux/timekeeping.h>
23
24 #define ADM1266_BLACKBOX_CONFIG 0xD3
25 #define ADM1266_PDIO_CONFIG 0xD4
26 #define ADM1266_READ_STATE 0xD9
27 #define ADM1266_READ_BLACKBOX 0xDE
28 #define ADM1266_SET_RTC 0xDF
29 #define ADM1266_GPIO_CONFIG 0xE1
30 #define ADM1266_BLACKBOX_INFO 0xE6
31 #define ADM1266_PDIO_STATUS 0xE9
32 #define ADM1266_GPIO_STATUS 0xEA
33
34 /* ADM1266 GPIO defines */
35 #define ADM1266_GPIO_NR 9
36 #define ADM1266_GPIO_FUNCTIONS(x) FIELD_GET(BIT(0), x)
37 #define ADM1266_GPIO_INPUT_EN(x) FIELD_GET(BIT(2), x)
38 #define ADM1266_GPIO_OUTPUT_EN(x) FIELD_GET(BIT(3), x)
39 #define ADM1266_GPIO_OPEN_DRAIN(x) FIELD_GET(BIT(4), x)
40
41 /* ADM1266 PDIO defines */
42 #define ADM1266_PDIO_NR 16
43 #define ADM1266_PDIO_PIN_CFG(x) FIELD_GET(GENMASK(15, 13), x)
44 #define ADM1266_PDIO_GLITCH_FILT(x) FIELD_GET(GENMASK(12, 9), x)
45 #define ADM1266_PDIO_OUT_CFG(x) FIELD_GET(GENMASK(2, 0), x)
46
47 #define ADM1266_BLACKBOX_OFFSET 0
48 #define ADM1266_BLACKBOX_SIZE 64
49 #define ADM1266_BLACKBOX_MAX_RECORDS 32
50
51 #define ADM1266_PMBUS_BLOCK_MAX 255
52
53 struct adm1266_data {
54 struct pmbus_driver_info info;
55 struct gpio_chip gc;
56 const char *gpio_names[ADM1266_GPIO_NR + ADM1266_PDIO_NR];
57 struct i2c_client *client;
58 struct dentry *debugfs_dir;
59 struct nvmem_config nvmem_config;
60 struct nvmem_device *nvmem;
61 u8 *dev_mem;
62 struct mutex buf_mutex;
63 u8 write_buf[ADM1266_PMBUS_BLOCK_MAX + 1] ____cacheline_aligned;
64 u8 read_buf[ADM1266_PMBUS_BLOCK_MAX + 2] ____cacheline_aligned;
65 };
66
67 static const struct nvmem_cell_info adm1266_nvmem_cells[] = {
68 {
69 .name = "blackbox",
70 .offset = ADM1266_BLACKBOX_OFFSET,
71 .bytes = 2048,
72 },
73 };
74
75 DECLARE_CRC8_TABLE(pmbus_crc_table);
76
77 /*
78 * Different from Block Read as it sends data and waits for the slave to
79 * return a value dependent on that data. The protocol is simply a Write Block
80 * followed by a Read Block without the Read-Block command field and the
81 * Write-Block STOP bit.
82 */
adm1266_pmbus_block_xfer(struct adm1266_data * data,u8 cmd,u8 w_len,u8 * data_w,u8 * data_r)83 static int adm1266_pmbus_block_xfer(struct adm1266_data *data, u8 cmd, u8 w_len, u8 *data_w,
84 u8 *data_r)
85 {
86 struct i2c_client *client = data->client;
87 struct i2c_msg msgs[2] = {
88 {
89 .addr = client->addr,
90 .flags = I2C_M_DMA_SAFE,
91 .buf = data->write_buf,
92 .len = w_len + 2,
93 },
94 {
95 .addr = client->addr,
96 .flags = I2C_M_RD | I2C_M_DMA_SAFE,
97 .buf = data->read_buf,
98 .len = ADM1266_PMBUS_BLOCK_MAX + 2,
99 }
100 };
101 u8 addr;
102 u8 crc;
103 int ret;
104
105 mutex_lock(&data->buf_mutex);
106
107 msgs[0].buf[0] = cmd;
108 msgs[0].buf[1] = w_len;
109 memcpy(&msgs[0].buf[2], data_w, w_len);
110
111 ret = i2c_transfer(client->adapter, msgs, 2);
112 if (ret != 2) {
113 if (ret >= 0)
114 ret = -EPROTO;
115
116 mutex_unlock(&data->buf_mutex);
117
118 return ret;
119 }
120
121 if (client->flags & I2C_CLIENT_PEC) {
122 addr = i2c_8bit_addr_from_msg(&msgs[0]);
123 crc = crc8(pmbus_crc_table, &addr, 1, 0);
124 crc = crc8(pmbus_crc_table, msgs[0].buf, msgs[0].len, crc);
125
126 addr = i2c_8bit_addr_from_msg(&msgs[1]);
127 crc = crc8(pmbus_crc_table, &addr, 1, crc);
128 crc = crc8(pmbus_crc_table, msgs[1].buf, msgs[1].buf[0] + 1, crc);
129
130 if (crc != msgs[1].buf[msgs[1].buf[0] + 1]) {
131 mutex_unlock(&data->buf_mutex);
132 return -EBADMSG;
133 }
134 }
135
136 memcpy(data_r, &msgs[1].buf[1], msgs[1].buf[0]);
137
138 ret = msgs[1].buf[0];
139 mutex_unlock(&data->buf_mutex);
140
141 return ret;
142 }
143
144 static const unsigned int adm1266_gpio_mapping[ADM1266_GPIO_NR][2] = {
145 {1, 0},
146 {2, 1},
147 {3, 2},
148 {4, 8},
149 {5, 9},
150 {6, 10},
151 {7, 11},
152 {8, 6},
153 {9, 7},
154 };
155
156 static const char *adm1266_names[ADM1266_GPIO_NR + ADM1266_PDIO_NR] = {
157 "GPIO1", "GPIO2", "GPIO3", "GPIO4", "GPIO5", "GPIO6", "GPIO7", "GPIO8",
158 "GPIO9", "PDIO1", "PDIO2", "PDIO3", "PDIO4", "PDIO5", "PDIO6",
159 "PDIO7", "PDIO8", "PDIO9", "PDIO10", "PDIO11", "PDIO12", "PDIO13",
160 "PDIO14", "PDIO15", "PDIO16",
161 };
162
adm1266_gpio_get(struct gpio_chip * chip,unsigned int offset)163 static int adm1266_gpio_get(struct gpio_chip *chip, unsigned int offset)
164 {
165 struct adm1266_data *data = gpiochip_get_data(chip);
166 u8 read_buf[I2C_SMBUS_BLOCK_MAX + 1];
167 unsigned long pins_status;
168 unsigned int pmbus_cmd;
169 int ret;
170
171 if (offset < ADM1266_GPIO_NR)
172 pmbus_cmd = ADM1266_GPIO_STATUS;
173 else
174 pmbus_cmd = ADM1266_PDIO_STATUS;
175
176 guard(pmbus_lock)(data->client);
177
178 ret = i2c_smbus_read_block_data(data->client, pmbus_cmd, read_buf);
179 if (ret < 0)
180 return ret;
181 if (ret < 2)
182 return -EIO;
183
184 pins_status = read_buf[0] + (read_buf[1] << 8);
185 if (offset < ADM1266_GPIO_NR)
186 return test_bit(adm1266_gpio_mapping[offset][1], &pins_status);
187
188 return test_bit(offset - ADM1266_GPIO_NR, &pins_status);
189 }
190
adm1266_gpio_get_multiple(struct gpio_chip * chip,unsigned long * mask,unsigned long * bits)191 static int adm1266_gpio_get_multiple(struct gpio_chip *chip, unsigned long *mask,
192 unsigned long *bits)
193 {
194 struct adm1266_data *data = gpiochip_get_data(chip);
195 u8 read_buf[ADM1266_PMBUS_BLOCK_MAX + 1];
196 unsigned long status;
197 unsigned int gpio_nr;
198 int ret;
199
200 guard(pmbus_lock)(data->client);
201
202 ret = i2c_smbus_read_block_data(data->client, ADM1266_GPIO_STATUS, read_buf);
203 if (ret < 0)
204 return ret;
205 if (ret < 2)
206 return -EIO;
207
208 status = read_buf[0] + (read_buf[1] << 8);
209
210 *bits = 0;
211 for_each_set_bit(gpio_nr, mask, ADM1266_GPIO_NR) {
212 if (test_bit(adm1266_gpio_mapping[gpio_nr][1], &status))
213 set_bit(gpio_nr, bits);
214 }
215
216 ret = i2c_smbus_read_block_data(data->client, ADM1266_PDIO_STATUS, read_buf);
217 if (ret < 0)
218 return ret;
219 if (ret < 2)
220 return -EIO;
221
222 status = read_buf[0] + (read_buf[1] << 8);
223
224 for_each_set_bit_from(gpio_nr, mask, ADM1266_GPIO_NR + ADM1266_PDIO_NR) {
225 if (test_bit(gpio_nr - ADM1266_GPIO_NR, &status))
226 set_bit(gpio_nr, bits);
227 }
228
229 return 0;
230 }
231
adm1266_gpio_dbg_show(struct seq_file * s,struct gpio_chip * chip)232 static void adm1266_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
233 {
234 struct adm1266_data *data = gpiochip_get_data(chip);
235 u8 read_buf[ADM1266_PMBUS_BLOCK_MAX + 1];
236 unsigned long gpio_config;
237 unsigned long pdio_config;
238 unsigned long pin_cfg;
239 u8 write_cmd;
240 int ret;
241 int i;
242
243 guard(pmbus_lock)(data->client);
244
245 for (i = 0; i < ADM1266_GPIO_NR; i++) {
246 write_cmd = adm1266_gpio_mapping[i][1];
247 ret = adm1266_pmbus_block_xfer(data, ADM1266_GPIO_CONFIG, 1, &write_cmd, read_buf);
248 if (ret != 2)
249 return;
250
251 gpio_config = read_buf[0];
252 seq_puts(s, adm1266_names[i]);
253
254 seq_puts(s, " ( ");
255 if (!ADM1266_GPIO_FUNCTIONS(gpio_config)) {
256 seq_puts(s, "high-Z )\n");
257 continue;
258 }
259 if (ADM1266_GPIO_INPUT_EN(gpio_config))
260 seq_puts(s, "input ");
261 if (ADM1266_GPIO_OUTPUT_EN(gpio_config))
262 seq_puts(s, "output ");
263 if (ADM1266_GPIO_OPEN_DRAIN(gpio_config))
264 seq_puts(s, "open-drain )\n");
265 else
266 seq_puts(s, "push-pull )\n");
267 }
268
269 write_cmd = 0xFF;
270 ret = adm1266_pmbus_block_xfer(data, ADM1266_PDIO_CONFIG, 1, &write_cmd, read_buf);
271 if (ret != 32)
272 return;
273
274 for (i = 0; i < ADM1266_PDIO_NR; i++) {
275 seq_puts(s, adm1266_names[ADM1266_GPIO_NR + i]);
276
277 pdio_config = read_buf[2 * i];
278 pdio_config += (read_buf[2 * i + 1] << 8);
279 pin_cfg = ADM1266_PDIO_PIN_CFG(pdio_config);
280
281 seq_puts(s, " ( ");
282 if (!pin_cfg || pin_cfg > 5) {
283 seq_puts(s, "high-Z )\n");
284 continue;
285 }
286
287 if (pin_cfg & BIT(0))
288 seq_puts(s, "output ");
289
290 if (pin_cfg & BIT(1))
291 seq_puts(s, "input ");
292
293 seq_puts(s, ")\n");
294 }
295 }
296
adm1266_config_gpio(struct adm1266_data * data)297 static int adm1266_config_gpio(struct adm1266_data *data)
298 {
299 const char *name = dev_name(&data->client->dev);
300 char *gpio_name;
301 int ret;
302 int i;
303
304 for (i = 0; i < ARRAY_SIZE(data->gpio_names); i++) {
305 gpio_name = devm_kasprintf(&data->client->dev, GFP_KERNEL, "adm1266-%d-%x-%s",
306 data->client->adapter->nr, data->client->addr,
307 adm1266_names[i]);
308 if (!gpio_name)
309 return -ENOMEM;
310
311 data->gpio_names[i] = gpio_name;
312 }
313
314 data->gc.label = name;
315 data->gc.parent = &data->client->dev;
316 data->gc.owner = THIS_MODULE;
317 data->gc.can_sleep = true;
318 data->gc.base = -1;
319 data->gc.names = data->gpio_names;
320 data->gc.ngpio = ARRAY_SIZE(data->gpio_names);
321 data->gc.get = adm1266_gpio_get;
322 data->gc.get_multiple = adm1266_gpio_get_multiple;
323 data->gc.dbg_show = adm1266_gpio_dbg_show;
324
325 ret = devm_gpiochip_add_data(&data->client->dev, &data->gc, data);
326 if (ret)
327 dev_err(&data->client->dev, "GPIO registering failed (%d)\n", ret);
328
329 return ret;
330 }
331
adm1266_state_read(struct seq_file * s,void * pdata)332 static int adm1266_state_read(struct seq_file *s, void *pdata)
333 {
334 struct device *dev = s->private;
335 struct i2c_client *client = to_i2c_client(dev);
336 int ret;
337
338 guard(pmbus_lock)(client);
339 ret = i2c_smbus_read_word_data(client, ADM1266_READ_STATE);
340 if (ret < 0)
341 return ret;
342
343 seq_printf(s, "%d\n", ret);
344
345 return 0;
346 }
347
adm1266_init_debugfs(struct adm1266_data * data)348 static void adm1266_init_debugfs(struct adm1266_data *data)
349 {
350 struct dentry *root;
351
352 root = pmbus_get_debugfs_dir(data->client);
353 if (!root)
354 return;
355
356 data->debugfs_dir = debugfs_create_dir(data->client->name, root);
357
358 debugfs_create_devm_seqfile(&data->client->dev, "sequencer_state", data->debugfs_dir,
359 adm1266_state_read);
360 }
361
adm1266_nvmem_read_blackbox(struct adm1266_data * data,u8 * read_buff)362 static int adm1266_nvmem_read_blackbox(struct adm1266_data *data, u8 *read_buff)
363 {
364 u8 record[ADM1266_PMBUS_BLOCK_MAX];
365 int record_count;
366 char index;
367 u8 buf[I2C_SMBUS_BLOCK_MAX];
368 int ret;
369
370 ret = i2c_smbus_read_block_data(data->client, ADM1266_BLACKBOX_INFO, buf);
371 if (ret < 0)
372 return ret;
373
374 if (ret != 4)
375 return -EIO;
376
377 record_count = buf[3];
378 if (record_count > ADM1266_BLACKBOX_MAX_RECORDS)
379 return -EIO;
380
381 for (index = 0; index < record_count; index++) {
382 ret = adm1266_pmbus_block_xfer(data, ADM1266_READ_BLACKBOX, 1, &index, record);
383 if (ret < 0)
384 return ret;
385
386 if (ret != ADM1266_BLACKBOX_SIZE)
387 return -EIO;
388
389 memcpy(read_buff, record, ADM1266_BLACKBOX_SIZE);
390 read_buff += ADM1266_BLACKBOX_SIZE;
391 }
392
393 return 0;
394 }
395
adm1266_nvmem_read(void * priv,unsigned int offset,void * val,size_t bytes)396 static int adm1266_nvmem_read(void *priv, unsigned int offset, void *val, size_t bytes)
397 {
398 struct adm1266_data *data = priv;
399 int ret;
400
401 if (offset + bytes > data->nvmem_config.size)
402 return -EINVAL;
403
404 guard(pmbus_lock)(data->client);
405
406 if (offset == 0) {
407 memset(data->dev_mem, 0, data->nvmem_config.size);
408
409 ret = adm1266_nvmem_read_blackbox(data, data->dev_mem);
410 if (ret) {
411 dev_err(&data->client->dev, "Could not read blackbox!");
412 return ret;
413 }
414 }
415
416 memcpy(val, data->dev_mem + offset, bytes);
417
418 return 0;
419 }
420
adm1266_config_nvmem(struct adm1266_data * data)421 static int adm1266_config_nvmem(struct adm1266_data *data)
422 {
423 data->nvmem_config.name = dev_name(&data->client->dev);
424 data->nvmem_config.dev = &data->client->dev;
425 data->nvmem_config.root_only = true;
426 data->nvmem_config.read_only = true;
427 data->nvmem_config.owner = THIS_MODULE;
428 data->nvmem_config.reg_read = adm1266_nvmem_read;
429 data->nvmem_config.cells = adm1266_nvmem_cells;
430 data->nvmem_config.ncells = ARRAY_SIZE(adm1266_nvmem_cells);
431 data->nvmem_config.priv = data;
432 data->nvmem_config.stride = 1;
433 data->nvmem_config.word_size = 1;
434 data->nvmem_config.size = adm1266_nvmem_cells[0].bytes;
435
436 data->dev_mem = devm_kzalloc(&data->client->dev, data->nvmem_config.size, GFP_KERNEL);
437 if (!data->dev_mem)
438 return -ENOMEM;
439
440 data->nvmem = devm_nvmem_register(&data->client->dev, &data->nvmem_config);
441 if (IS_ERR(data->nvmem)) {
442 dev_err(&data->client->dev, "Could not register nvmem!");
443 return PTR_ERR(data->nvmem);
444 }
445
446 return 0;
447 }
448
adm1266_set_rtc(struct adm1266_data * data)449 static int adm1266_set_rtc(struct adm1266_data *data)
450 {
451 time64_t kt;
452 char write_buf[6];
453 int i;
454
455 kt = ktime_get_real_seconds();
456
457 memset(write_buf, 0, sizeof(write_buf));
458
459 for (i = 0; i < 4; i++)
460 write_buf[2 + i] = (kt >> (i * 8)) & 0xFF;
461
462 return i2c_smbus_write_block_data(data->client, ADM1266_SET_RTC, sizeof(write_buf),
463 write_buf);
464 }
465
adm1266_probe(struct i2c_client * client)466 static int adm1266_probe(struct i2c_client *client)
467 {
468 struct adm1266_data *data;
469 int ret;
470 int i;
471
472 data = devm_kzalloc(&client->dev, sizeof(struct adm1266_data), GFP_KERNEL);
473 if (!data)
474 return -ENOMEM;
475
476 data->client = client;
477 data->info.pages = 17;
478 data->info.format[PSC_VOLTAGE_OUT] = linear;
479 for (i = 0; i < data->info.pages; i++)
480 data->info.func[i] = PMBUS_HAVE_VOUT | PMBUS_HAVE_STATUS_VOUT;
481
482 crc8_populate_msb(pmbus_crc_table, 0x7);
483 mutex_init(&data->buf_mutex);
484
485 ret = adm1266_set_rtc(data);
486 if (ret < 0)
487 return ret;
488
489 ret = pmbus_do_probe(client, &data->info);
490 if (ret)
491 return ret;
492
493 ret = adm1266_config_nvmem(data);
494 if (ret < 0)
495 return ret;
496
497 ret = adm1266_config_gpio(data);
498 if (ret < 0)
499 return ret;
500
501 adm1266_init_debugfs(data);
502
503 return 0;
504 }
505
506 static const struct of_device_id adm1266_of_match[] = {
507 { .compatible = "adi,adm1266" },
508 { }
509 };
510 MODULE_DEVICE_TABLE(of, adm1266_of_match);
511
512 static const struct i2c_device_id adm1266_id[] = {
513 { "adm1266" },
514 { }
515 };
516 MODULE_DEVICE_TABLE(i2c, adm1266_id);
517
518 static struct i2c_driver adm1266_driver = {
519 .driver = {
520 .name = "adm1266",
521 .of_match_table = adm1266_of_match,
522 },
523 .probe = adm1266_probe,
524 .id_table = adm1266_id,
525 };
526
527 module_i2c_driver(adm1266_driver);
528
529 MODULE_AUTHOR("Alexandru Tachici <alexandru.tachici@analog.com>");
530 MODULE_DESCRIPTION("PMBus driver for Analog Devices ADM1266");
531 MODULE_LICENSE("GPL v2");
532 MODULE_IMPORT_NS("PMBUS");
533