1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it>
6 * Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it>
8 * This module supports the PCA954x and PCA984x series of I2C multiplexer/switch
9 * chips made by NXP Semiconductors.
11 * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547,
12 * PCA9548, PCA9846, PCA9847, PCA9848 and PCA9849.
14 * It's also compatible to Maxims MAX735x I2C switch chips, which are controlled
15 * as the NXP PCA9548 and the MAX736x chips that act like the PCA9544.
18 * MAX7356, MAX7357, MAX7358, MAX7367, MAX7368 and MAX7369
20 * These chips are all controlled via the I2C bus itself, and all have a
21 * single 8-bit register. The upstream "parent" bus fans out to two,
22 * four, or eight downstream busses or channels; which of these
23 * are selected is determined by the chip type and register contents. A
24 * mux can select only one sub-bus at a time; a switch can select any
25 * combination simultaneously.
28 * pca954x.c from Kumar Gala <galak@kernel.crashing.org>
32 * pca954x.c from Ken Harrenstien
33 * Copyright (C) 2004 Google, Inc. (Ken Harrenstien)
36 * i2c-virtual_cb.c from Brian Kuschak <bkuschak@yahoo.com>
38 * pca9540.c from Jean Delvare <jdelvare@suse.de>.
41 #include <linux/device.h>
42 #include <linux/delay.h>
43 #include <linux/gpio/consumer.h>
44 #include <linux/i2c.h>
45 #include <linux/i2c-mux.h>
46 #include <linux/interrupt.h>
47 #include <linux/irq.h>
48 #include <linux/module.h>
50 #include <linux/property.h>
51 #include <linux/regulator/consumer.h>
52 #include <linux/reset.h>
53 #include <linux/slab.h>
54 #include <linux/spinlock.h>
55 #include <dt-bindings/mux/mux.h>
57 #define PCA954X_MAX_NCHANS 8
59 #define PCA954X_IRQ_OFFSET 4
62 * MAX7357's configuration register is writeable after POR, but
63 * can be locked by setting the basic mode bit. MAX7358 configuration
64 * register is locked by default and needs to be unlocked first.
65 * The configuration register holds the following settings:
67 #define MAX7357_CONF_INT_ENABLE BIT(0)
68 #define MAX7357_CONF_FLUSH_OUT BIT(1)
69 #define MAX7357_CONF_RELEASE_INT BIT(2)
70 #define MAX7357_CONF_DISCON_SINGLE_CHAN BIT(4)
71 #define MAX7357_CONF_PRECONNECT_TEST BIT(7)
73 #define MAX7357_POR_DEFAULT_CONF MAX7357_CONF_INT_ENABLE
98 u8 enable
; /* used for muxes only */
104 struct i2c_device_identity id
;
108 const struct chip_desc
*chip
;
110 u8 last_chan
; /* last register value */
111 /* MUX_IDLE_AS_IS, MUX_IDLE_DISCONNECT or >= 0 for channel */
114 struct i2c_client
*client
;
116 struct irq_domain
*irq
;
117 unsigned int irq_mask
;
119 struct regulator
*supply
;
121 struct gpio_desc
*reset_gpio
;
122 struct reset_control
*reset_cont
;
125 /* Provide specs for the MAX735x, PCA954x and PCA984x types we know about */
126 static const struct chip_desc chips
[] = {
129 .muxtype
= pca954x_isswi
,
130 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
134 .muxtype
= pca954x_isswi
,
135 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
137 * No interrupt controller support. The interrupt
138 * provides information about stuck channels.
143 .muxtype
= pca954x_isswi
,
144 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
146 * No interrupt controller support. The interrupt
147 * provides information about stuck channels.
152 .muxtype
= pca954x_isswi
,
154 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
158 .muxtype
= pca954x_isswi
,
159 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
164 .muxtype
= pca954x_ismux
,
166 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
171 .muxtype
= pca954x_ismux
,
172 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
178 .muxtype
= pca954x_ismux
,
179 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
184 .muxtype
= pca954x_isswi
,
185 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
191 .muxtype
= pca954x_ismux
,
192 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
197 .muxtype
= pca954x_isswi
,
198 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
202 .muxtype
= pca954x_isswi
,
203 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
208 .muxtype
= pca954x_ismux
,
209 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
213 .muxtype
= pca954x_isswi
,
214 .id
= { .manufacturer_id
= I2C_DEVICE_ID_NONE
},
218 .muxtype
= pca954x_isswi
,
220 .manufacturer_id
= I2C_DEVICE_ID_NXP_SEMICONDUCTORS
,
227 .muxtype
= pca954x_ismux
,
229 .manufacturer_id
= I2C_DEVICE_ID_NXP_SEMICONDUCTORS
,
235 .muxtype
= pca954x_isswi
,
237 .manufacturer_id
= I2C_DEVICE_ID_NXP_SEMICONDUCTORS
,
244 .muxtype
= pca954x_ismux
,
246 .manufacturer_id
= I2C_DEVICE_ID_NXP_SEMICONDUCTORS
,
252 static const struct i2c_device_id pca954x_id
[] = {
253 { "max7356", max_7356
},
254 { "max7357", max_7357
},
255 { "max7358", max_7358
},
256 { "max7367", max_7367
},
257 { "max7368", max_7368
},
258 { "max7369", max_7369
},
259 { "pca9540", pca_9540
},
260 { "pca9542", pca_9542
},
261 { "pca9543", pca_9543
},
262 { "pca9544", pca_9544
},
263 { "pca9545", pca_9545
},
264 { "pca9546", pca_9546
},
265 { "pca9547", pca_9547
},
266 { "pca9548", pca_9548
},
267 { "pca9846", pca_9846
},
268 { "pca9847", pca_9847
},
269 { "pca9848", pca_9848
},
270 { "pca9849", pca_9849
},
273 MODULE_DEVICE_TABLE(i2c
, pca954x_id
);
275 static const struct of_device_id pca954x_of_match
[] = {
276 { .compatible
= "maxim,max7356", .data
= &chips
[max_7356
] },
277 { .compatible
= "maxim,max7357", .data
= &chips
[max_7357
] },
278 { .compatible
= "maxim,max7358", .data
= &chips
[max_7358
] },
279 { .compatible
= "maxim,max7367", .data
= &chips
[max_7367
] },
280 { .compatible
= "maxim,max7368", .data
= &chips
[max_7368
] },
281 { .compatible
= "maxim,max7369", .data
= &chips
[max_7369
] },
282 { .compatible
= "nxp,pca9540", .data
= &chips
[pca_9540
] },
283 { .compatible
= "nxp,pca9542", .data
= &chips
[pca_9542
] },
284 { .compatible
= "nxp,pca9543", .data
= &chips
[pca_9543
] },
285 { .compatible
= "nxp,pca9544", .data
= &chips
[pca_9544
] },
286 { .compatible
= "nxp,pca9545", .data
= &chips
[pca_9545
] },
287 { .compatible
= "nxp,pca9546", .data
= &chips
[pca_9546
] },
288 { .compatible
= "nxp,pca9547", .data
= &chips
[pca_9547
] },
289 { .compatible
= "nxp,pca9548", .data
= &chips
[pca_9548
] },
290 { .compatible
= "nxp,pca9846", .data
= &chips
[pca_9846
] },
291 { .compatible
= "nxp,pca9847", .data
= &chips
[pca_9847
] },
292 { .compatible
= "nxp,pca9848", .data
= &chips
[pca_9848
] },
293 { .compatible
= "nxp,pca9849", .data
= &chips
[pca_9849
] },
296 MODULE_DEVICE_TABLE(of
, pca954x_of_match
);
298 /* Write to mux register. Don't use i2c_transfer()/i2c_smbus_xfer()
299 for this as they will try to lock adapter a second time */
300 static int pca954x_reg_write(struct i2c_adapter
*adap
,
301 struct i2c_client
*client
, u8 val
)
303 union i2c_smbus_data dummy
;
305 return __i2c_smbus_xfer(adap
, client
->addr
, client
->flags
,
306 I2C_SMBUS_WRITE
, val
,
307 I2C_SMBUS_BYTE
, &dummy
);
310 static u8
pca954x_regval(struct pca954x
*data
, u8 chan
)
312 /* We make switches look like muxes, not sure how to be smarter. */
313 if (data
->chip
->muxtype
== pca954x_ismux
)
314 return chan
| data
->chip
->enable
;
319 static int pca954x_select_chan(struct i2c_mux_core
*muxc
, u32 chan
)
321 struct pca954x
*data
= i2c_mux_priv(muxc
);
322 struct i2c_client
*client
= data
->client
;
326 regval
= pca954x_regval(data
, chan
);
327 /* Only select the channel if its different from the last channel */
328 if (data
->last_chan
!= regval
) {
329 ret
= pca954x_reg_write(muxc
->parent
, client
, regval
);
330 data
->last_chan
= ret
< 0 ? 0 : regval
;
336 static int pca954x_deselect_mux(struct i2c_mux_core
*muxc
, u32 chan
)
338 struct pca954x
*data
= i2c_mux_priv(muxc
);
339 struct i2c_client
*client
= data
->client
;
342 idle_state
= READ_ONCE(data
->idle_state
);
344 /* Set the mux back to a predetermined channel */
345 return pca954x_select_chan(muxc
, idle_state
);
347 if (idle_state
== MUX_IDLE_DISCONNECT
) {
348 /* Deselect active channel */
350 return pca954x_reg_write(muxc
->parent
, client
,
354 /* otherwise leave as-is */
359 static ssize_t
idle_state_show(struct device
*dev
,
360 struct device_attribute
*attr
,
363 struct i2c_client
*client
= to_i2c_client(dev
);
364 struct i2c_mux_core
*muxc
= i2c_get_clientdata(client
);
365 struct pca954x
*data
= i2c_mux_priv(muxc
);
367 return sprintf(buf
, "%d\n", READ_ONCE(data
->idle_state
));
370 static ssize_t
idle_state_store(struct device
*dev
,
371 struct device_attribute
*attr
,
372 const char *buf
, size_t count
)
374 struct i2c_client
*client
= to_i2c_client(dev
);
375 struct i2c_mux_core
*muxc
= i2c_get_clientdata(client
);
376 struct pca954x
*data
= i2c_mux_priv(muxc
);
380 ret
= kstrtoint(buf
, 0, &val
);
384 if (val
!= MUX_IDLE_AS_IS
&& val
!= MUX_IDLE_DISCONNECT
&&
385 (val
< 0 || val
>= data
->chip
->nchans
))
388 i2c_lock_bus(muxc
->parent
, I2C_LOCK_SEGMENT
);
390 WRITE_ONCE(data
->idle_state
, val
);
392 * Set the mux into a state consistent with the new
395 if (data
->last_chan
|| val
!= MUX_IDLE_DISCONNECT
)
396 ret
= pca954x_deselect_mux(muxc
, 0);
398 i2c_unlock_bus(muxc
->parent
, I2C_LOCK_SEGMENT
);
400 return ret
< 0 ? ret
: count
;
403 static DEVICE_ATTR_RW(idle_state
);
405 static irqreturn_t
pca954x_irq_handler(int irq
, void *dev_id
)
407 struct pca954x
*data
= dev_id
;
408 unsigned long pending
;
411 ret
= i2c_smbus_read_byte(data
->client
);
415 pending
= (ret
>> PCA954X_IRQ_OFFSET
) & (BIT(data
->chip
->nchans
) - 1);
416 for_each_set_bit(i
, &pending
, data
->chip
->nchans
)
417 handle_nested_irq(irq_linear_revmap(data
->irq
, i
));
419 return IRQ_RETVAL(pending
);
422 static int pca954x_irq_set_type(struct irq_data
*idata
, unsigned int type
)
424 if ((type
& IRQ_TYPE_SENSE_MASK
) != IRQ_TYPE_LEVEL_LOW
)
429 static struct irq_chip pca954x_irq_chip
= {
430 .name
= "i2c-mux-pca954x",
431 .irq_set_type
= pca954x_irq_set_type
,
434 static int pca954x_irq_setup(struct i2c_mux_core
*muxc
)
436 struct pca954x
*data
= i2c_mux_priv(muxc
);
437 struct i2c_client
*client
= data
->client
;
440 if (!data
->chip
->has_irq
|| client
->irq
<= 0)
443 raw_spin_lock_init(&data
->lock
);
445 data
->irq
= irq_domain_add_linear(client
->dev
.of_node
,
447 &irq_domain_simple_ops
, data
);
451 for (c
= 0; c
< data
->chip
->nchans
; c
++) {
452 irq
= irq_create_mapping(data
->irq
, c
);
454 dev_err(&client
->dev
, "failed irq create map\n");
457 irq_set_chip_data(irq
, data
);
458 irq_set_chip_and_handler(irq
, &pca954x_irq_chip
,
465 static void pca954x_cleanup(struct i2c_mux_core
*muxc
)
467 struct pca954x
*data
= i2c_mux_priv(muxc
);
470 regulator_disable(data
->supply
);
473 for (c
= 0; c
< data
->chip
->nchans
; c
++) {
474 irq
= irq_find_mapping(data
->irq
, c
);
475 irq_dispose_mapping(irq
);
477 irq_domain_remove(data
->irq
);
479 i2c_mux_del_adapters(muxc
);
482 static int pca954x_init(struct i2c_client
*client
, struct pca954x
*data
)
486 if (data
->idle_state
>= 0)
487 data
->last_chan
= pca954x_regval(data
, data
->idle_state
);
489 data
->last_chan
= 0; /* Disconnect multiplexer */
491 if (device_is_compatible(&client
->dev
, "maxim,max7357")) {
492 if (i2c_check_functionality(client
->adapter
, I2C_FUNC_SMBUS_WRITE_BYTE_DATA
)) {
493 u8 conf
= MAX7357_POR_DEFAULT_CONF
;
495 * The interrupt signal is shared with the reset pin. Release the
496 * interrupt after 1.6 seconds to allow using the pin as reset.
498 conf
|= MAX7357_CONF_RELEASE_INT
;
500 if (device_property_read_bool(&client
->dev
, "maxim,isolate-stuck-channel"))
501 conf
|= MAX7357_CONF_DISCON_SINGLE_CHAN
;
502 if (device_property_read_bool(&client
->dev
,
503 "maxim,send-flush-out-sequence"))
504 conf
|= MAX7357_CONF_FLUSH_OUT
;
505 if (device_property_read_bool(&client
->dev
,
506 "maxim,preconnection-wiggle-test-enable"))
507 conf
|= MAX7357_CONF_PRECONNECT_TEST
;
509 ret
= i2c_smbus_write_byte_data(client
, data
->last_chan
, conf
);
511 dev_warn(&client
->dev
, "Write byte data not supported."
512 "Cannot enable enhanced mode features\n");
513 ret
= i2c_smbus_write_byte(client
, data
->last_chan
);
516 ret
= i2c_smbus_write_byte(client
, data
->last_chan
);
525 static int pca954x_get_reset(struct device
*dev
, struct pca954x
*data
)
527 data
->reset_cont
= devm_reset_control_get_optional_shared(dev
, NULL
);
528 if (IS_ERR(data
->reset_cont
))
529 return dev_err_probe(dev
, PTR_ERR(data
->reset_cont
),
530 "Failed to get reset\n");
531 else if (data
->reset_cont
)
535 * fallback to legacy reset-gpios
537 data
->reset_gpio
= devm_gpiod_get_optional(dev
, "reset", GPIOD_OUT_HIGH
);
538 if (IS_ERR(data
->reset_gpio
)) {
539 return dev_err_probe(dev
, PTR_ERR(data
->reset_gpio
),
540 "Failed to get reset gpio");
546 static void pca954x_reset_deassert(struct pca954x
*data
)
548 if (data
->reset_cont
)
549 reset_control_deassert(data
->reset_cont
);
551 gpiod_set_value_cansleep(data
->reset_gpio
, 0);
555 * I2C init/probing/exit functions
557 static int pca954x_probe(struct i2c_client
*client
)
559 const struct i2c_device_id
*id
= i2c_client_get_device_id(client
);
560 struct i2c_adapter
*adap
= client
->adapter
;
561 struct device
*dev
= &client
->dev
;
562 struct i2c_mux_core
*muxc
;
563 struct pca954x
*data
;
567 if (!i2c_check_functionality(adap
, I2C_FUNC_SMBUS_BYTE
))
570 muxc
= i2c_mux_alloc(adap
, dev
, PCA954X_MAX_NCHANS
, sizeof(*data
), 0,
571 pca954x_select_chan
, pca954x_deselect_mux
);
574 data
= i2c_mux_priv(muxc
);
576 i2c_set_clientdata(client
, muxc
);
577 data
->client
= client
;
579 data
->supply
= devm_regulator_get(dev
, "vdd");
580 if (IS_ERR(data
->supply
))
581 return dev_err_probe(dev
, PTR_ERR(data
->supply
),
582 "Failed to request regulator\n");
584 ret
= regulator_enable(data
->supply
);
586 return dev_err_probe(dev
, ret
,
587 "Failed to enable vdd supply\n");
589 ret
= pca954x_get_reset(dev
, data
);
593 if (data
->reset_cont
|| data
->reset_gpio
) {
595 pca954x_reset_deassert(data
);
596 /* Give the chip some time to recover. */
600 data
->chip
= device_get_match_data(dev
);
602 data
->chip
= &chips
[id
->driver_data
];
604 if (data
->chip
->id
.manufacturer_id
!= I2C_DEVICE_ID_NONE
) {
605 struct i2c_device_identity id
;
607 ret
= i2c_get_device_id(client
, &id
);
608 if (ret
&& ret
!= -EOPNOTSUPP
)
612 (id
.manufacturer_id
!= data
->chip
->id
.manufacturer_id
||
613 id
.part_id
!= data
->chip
->id
.part_id
)) {
614 dev_warn(dev
, "unexpected device id %03x-%03x-%x\n",
615 id
.manufacturer_id
, id
.part_id
,
622 data
->idle_state
= MUX_IDLE_AS_IS
;
623 if (device_property_read_u32(dev
, "idle-state", &data
->idle_state
)) {
624 if (device_property_read_bool(dev
, "i2c-mux-idle-disconnect"))
625 data
->idle_state
= MUX_IDLE_DISCONNECT
;
629 * Write the mux register at addr to verify
630 * that the mux is in fact present. This also
631 * initializes the mux to a channel
632 * or disconnected state.
634 ret
= pca954x_init(client
, data
);
636 dev_warn(dev
, "probe failed\n");
641 ret
= pca954x_irq_setup(muxc
);
645 /* Now create an adapter for each channel */
646 for (num
= 0; num
< data
->chip
->nchans
; num
++) {
647 ret
= i2c_mux_add_adapter(muxc
, 0, num
);
653 ret
= devm_request_threaded_irq(dev
, data
->client
->irq
,
654 NULL
, pca954x_irq_handler
,
655 IRQF_ONESHOT
| IRQF_SHARED
,
662 * The attr probably isn't going to be needed in most cases,
663 * so don't fail completely on error.
665 device_create_file(dev
, &dev_attr_idle_state
);
667 dev_info(dev
, "registered %d multiplexed busses for I2C %s %s\n",
668 num
, data
->chip
->muxtype
== pca954x_ismux
669 ? "mux" : "switch", client
->name
);
674 pca954x_cleanup(muxc
);
678 static void pca954x_remove(struct i2c_client
*client
)
680 struct i2c_mux_core
*muxc
= i2c_get_clientdata(client
);
682 device_remove_file(&client
->dev
, &dev_attr_idle_state
);
684 pca954x_cleanup(muxc
);
687 static int pca954x_resume(struct device
*dev
)
689 struct i2c_client
*client
= to_i2c_client(dev
);
690 struct i2c_mux_core
*muxc
= i2c_get_clientdata(client
);
691 struct pca954x
*data
= i2c_mux_priv(muxc
);
694 ret
= pca954x_init(client
, data
);
696 dev_err(&client
->dev
, "failed to verify mux presence\n");
701 static DEFINE_SIMPLE_DEV_PM_OPS(pca954x_pm
, NULL
, pca954x_resume
);
703 static struct i2c_driver pca954x_driver
= {
706 .pm
= pm_sleep_ptr(&pca954x_pm
),
707 .of_match_table
= pca954x_of_match
,
709 .probe
= pca954x_probe
,
710 .remove
= pca954x_remove
,
711 .id_table
= pca954x_id
,
714 module_i2c_driver(pca954x_driver
);
716 MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
717 MODULE_DESCRIPTION("PCA954x I2C mux/switch driver");
718 MODULE_LICENSE("GPL v2");