1 /* 2 * I2C multiplexer 3 * 4 * Copyright (c) 2008-2009 Rodolfo Giometti <giometti@linux.it> 5 * Copyright (c) 2008-2009 Eurotech S.p.A. <info@eurotech.it> 6 * 7 * This module supports the PCA954x series of I2C multiplexer/switch chips 8 * made by Philips Semiconductors. 9 * This includes the: 10 * PCA9540, PCA9542, PCA9543, PCA9544, PCA9545, PCA9546, PCA9547 11 * and PCA9548. 12 * 13 * These chips are all controlled via the I2C bus itself, and all have a 14 * single 8-bit register. The upstream "parent" bus fans out to two, 15 * four, or eight downstream busses or channels; which of these 16 * are selected is determined by the chip type and register contents. A 17 * mux can select only one sub-bus at a time; a switch can select any 18 * combination simultaneously. 19 * 20 * Based on: 21 * pca954x.c from Kumar Gala <galak@kernel.crashing.org> 22 * Copyright (C) 2006 23 * 24 * Based on: 25 * pca954x.c from Ken Harrenstien 26 * Copyright (C) 2004 Google, Inc. (Ken Harrenstien) 27 * 28 * Based on: 29 * i2c-virtual_cb.c from Brian Kuschak <bkuschak@yahoo.com> 30 * and 31 * pca9540.c from Jean Delvare <jdelvare@suse.de>. 32 * 33 * This file is licensed under the terms of the GNU General Public 34 * License version 2. This program is licensed "as is" without any 35 * warranty of any kind, whether express or implied. 36 */ 37 38 #include <linux/acpi.h> 39 #include <linux/device.h> 40 #include <linux/gpio/consumer.h> 41 #include <linux/i2c.h> 42 #include <linux/i2c-mux.h> 43 #include <linux/i2c/pca954x.h> 44 #include <linux/module.h> 45 #include <linux/of.h> 46 #include <linux/of_device.h> 47 #include <linux/pm.h> 48 #include <linux/slab.h> 49 50 #define PCA954X_MAX_NCHANS 8 51 52 enum pca_type { 53 pca_9540, 54 pca_9542, 55 pca_9543, 56 pca_9544, 57 pca_9545, 58 pca_9546, 59 pca_9547, 60 pca_9548, 61 }; 62 63 struct chip_desc { 64 u8 nchans; 65 u8 enable; /* used for muxes only */ 66 enum muxtype { 67 pca954x_ismux = 0, 68 pca954x_isswi 69 } muxtype; 70 }; 71 72 struct pca954x { 73 const struct chip_desc *chip; 74 75 u8 last_chan; /* last register value */ 76 u8 deselect; 77 struct i2c_client *client; 78 }; 79 80 /* Provide specs for the PCA954x types we know about */ 81 static const struct chip_desc chips[] = { 82 [pca_9540] = { 83 .nchans = 2, 84 .enable = 0x4, 85 .muxtype = pca954x_ismux, 86 }, 87 [pca_9543] = { 88 .nchans = 2, 89 .muxtype = pca954x_isswi, 90 }, 91 [pca_9544] = { 92 .nchans = 4, 93 .enable = 0x4, 94 .muxtype = pca954x_ismux, 95 }, 96 [pca_9545] = { 97 .nchans = 4, 98 .muxtype = pca954x_isswi, 99 }, 100 [pca_9547] = { 101 .nchans = 8, 102 .enable = 0x8, 103 .muxtype = pca954x_ismux, 104 }, 105 [pca_9548] = { 106 .nchans = 8, 107 .muxtype = pca954x_isswi, 108 }, 109 }; 110 111 static const struct i2c_device_id pca954x_id[] = { 112 { "pca9540", pca_9540 }, 113 { "pca9542", pca_9540 }, 114 { "pca9543", pca_9543 }, 115 { "pca9544", pca_9544 }, 116 { "pca9545", pca_9545 }, 117 { "pca9546", pca_9545 }, 118 { "pca9547", pca_9547 }, 119 { "pca9548", pca_9548 }, 120 { } 121 }; 122 MODULE_DEVICE_TABLE(i2c, pca954x_id); 123 124 #ifdef CONFIG_ACPI 125 static const struct acpi_device_id pca954x_acpi_ids[] = { 126 { .id = "PCA9540", .driver_data = pca_9540 }, 127 { .id = "PCA9542", .driver_data = pca_9540 }, 128 { .id = "PCA9543", .driver_data = pca_9543 }, 129 { .id = "PCA9544", .driver_data = pca_9544 }, 130 { .id = "PCA9545", .driver_data = pca_9545 }, 131 { .id = "PCA9546", .driver_data = pca_9545 }, 132 { .id = "PCA9547", .driver_data = pca_9547 }, 133 { .id = "PCA9548", .driver_data = pca_9548 }, 134 { } 135 }; 136 MODULE_DEVICE_TABLE(acpi, pca954x_acpi_ids); 137 #endif 138 139 #ifdef CONFIG_OF 140 static const struct of_device_id pca954x_of_match[] = { 141 { .compatible = "nxp,pca9540", .data = &chips[pca_9540] }, 142 { .compatible = "nxp,pca9542", .data = &chips[pca_9542] }, 143 { .compatible = "nxp,pca9543", .data = &chips[pca_9543] }, 144 { .compatible = "nxp,pca9544", .data = &chips[pca_9544] }, 145 { .compatible = "nxp,pca9545", .data = &chips[pca_9545] }, 146 { .compatible = "nxp,pca9546", .data = &chips[pca_9546] }, 147 { .compatible = "nxp,pca9547", .data = &chips[pca_9547] }, 148 { .compatible = "nxp,pca9548", .data = &chips[pca_9548] }, 149 {} 150 }; 151 #endif 152 153 /* Write to mux register. Don't use i2c_transfer()/i2c_smbus_xfer() 154 for this as they will try to lock adapter a second time */ 155 static int pca954x_reg_write(struct i2c_adapter *adap, 156 struct i2c_client *client, u8 val) 157 { 158 int ret = -ENODEV; 159 160 if (adap->algo->master_xfer) { 161 struct i2c_msg msg; 162 char buf[1]; 163 164 msg.addr = client->addr; 165 msg.flags = 0; 166 msg.len = 1; 167 buf[0] = val; 168 msg.buf = buf; 169 ret = __i2c_transfer(adap, &msg, 1); 170 171 if (ret >= 0 && ret != 1) 172 ret = -EREMOTEIO; 173 } else { 174 union i2c_smbus_data data; 175 ret = adap->algo->smbus_xfer(adap, client->addr, 176 client->flags, 177 I2C_SMBUS_WRITE, 178 val, I2C_SMBUS_BYTE, &data); 179 } 180 181 return ret; 182 } 183 184 static int pca954x_select_chan(struct i2c_mux_core *muxc, u32 chan) 185 { 186 struct pca954x *data = i2c_mux_priv(muxc); 187 struct i2c_client *client = data->client; 188 const struct chip_desc *chip = data->chip; 189 u8 regval; 190 int ret = 0; 191 192 /* we make switches look like muxes, not sure how to be smarter */ 193 if (chip->muxtype == pca954x_ismux) 194 regval = chan | chip->enable; 195 else 196 regval = 1 << chan; 197 198 /* Only select the channel if its different from the last channel */ 199 if (data->last_chan != regval) { 200 ret = pca954x_reg_write(muxc->parent, client, regval); 201 data->last_chan = ret < 0 ? 0 : regval; 202 } 203 204 return ret; 205 } 206 207 static int pca954x_deselect_mux(struct i2c_mux_core *muxc, u32 chan) 208 { 209 struct pca954x *data = i2c_mux_priv(muxc); 210 struct i2c_client *client = data->client; 211 212 if (!(data->deselect & (1 << chan))) 213 return 0; 214 215 /* Deselect active channel */ 216 data->last_chan = 0; 217 return pca954x_reg_write(muxc->parent, client, data->last_chan); 218 } 219 220 /* 221 * I2C init/probing/exit functions 222 */ 223 static int pca954x_probe(struct i2c_client *client, 224 const struct i2c_device_id *id) 225 { 226 struct i2c_adapter *adap = to_i2c_adapter(client->dev.parent); 227 struct pca954x_platform_data *pdata = dev_get_platdata(&client->dev); 228 struct device_node *of_node = client->dev.of_node; 229 bool idle_disconnect_dt; 230 struct gpio_desc *gpio; 231 int num, force, class; 232 struct i2c_mux_core *muxc; 233 struct pca954x *data; 234 const struct of_device_id *match; 235 int ret; 236 237 if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_BYTE)) 238 return -ENODEV; 239 240 muxc = i2c_mux_alloc(adap, &client->dev, 241 PCA954X_MAX_NCHANS, sizeof(*data), 0, 242 pca954x_select_chan, pca954x_deselect_mux); 243 if (!muxc) 244 return -ENOMEM; 245 data = i2c_mux_priv(muxc); 246 247 i2c_set_clientdata(client, muxc); 248 data->client = client; 249 250 /* Get the mux out of reset if a reset GPIO is specified. */ 251 gpio = devm_gpiod_get_optional(&client->dev, "reset", GPIOD_OUT_LOW); 252 if (IS_ERR(gpio)) 253 return PTR_ERR(gpio); 254 255 /* Write the mux register at addr to verify 256 * that the mux is in fact present. This also 257 * initializes the mux to disconnected state. 258 */ 259 if (i2c_smbus_write_byte(client, 0) < 0) { 260 dev_warn(&client->dev, "probe failed\n"); 261 return -ENODEV; 262 } 263 264 match = of_match_device(of_match_ptr(pca954x_of_match), &client->dev); 265 if (match) 266 data->chip = of_device_get_match_data(&client->dev); 267 else if (id) 268 data->chip = &chips[id->driver_data]; 269 else { 270 const struct acpi_device_id *acpi_id; 271 272 acpi_id = acpi_match_device(ACPI_PTR(pca954x_acpi_ids), 273 &client->dev); 274 if (!acpi_id) 275 return -ENODEV; 276 data->chip = &chips[acpi_id->driver_data]; 277 } 278 279 data->last_chan = 0; /* force the first selection */ 280 281 idle_disconnect_dt = of_node && 282 of_property_read_bool(of_node, "i2c-mux-idle-disconnect"); 283 284 /* Now create an adapter for each channel */ 285 for (num = 0; num < data->chip->nchans; num++) { 286 bool idle_disconnect_pd = false; 287 288 force = 0; /* dynamic adap number */ 289 class = 0; /* no class by default */ 290 if (pdata) { 291 if (num < pdata->num_modes) { 292 /* force static number */ 293 force = pdata->modes[num].adap_id; 294 class = pdata->modes[num].class; 295 } else 296 /* discard unconfigured channels */ 297 break; 298 idle_disconnect_pd = pdata->modes[num].deselect_on_exit; 299 } 300 data->deselect |= (idle_disconnect_pd || 301 idle_disconnect_dt) << num; 302 303 ret = i2c_mux_add_adapter(muxc, force, num, class); 304 305 if (ret) { 306 dev_err(&client->dev, 307 "failed to register multiplexed adapter" 308 " %d as bus %d\n", num, force); 309 goto virt_reg_failed; 310 } 311 } 312 313 dev_info(&client->dev, 314 "registered %d multiplexed busses for I2C %s %s\n", 315 num, data->chip->muxtype == pca954x_ismux 316 ? "mux" : "switch", client->name); 317 318 return 0; 319 320 virt_reg_failed: 321 i2c_mux_del_adapters(muxc); 322 return ret; 323 } 324 325 static int pca954x_remove(struct i2c_client *client) 326 { 327 struct i2c_mux_core *muxc = i2c_get_clientdata(client); 328 329 i2c_mux_del_adapters(muxc); 330 return 0; 331 } 332 333 #ifdef CONFIG_PM_SLEEP 334 static int pca954x_resume(struct device *dev) 335 { 336 struct i2c_client *client = to_i2c_client(dev); 337 struct i2c_mux_core *muxc = i2c_get_clientdata(client); 338 struct pca954x *data = i2c_mux_priv(muxc); 339 340 data->last_chan = 0; 341 return i2c_smbus_write_byte(client, 0); 342 } 343 #endif 344 345 static SIMPLE_DEV_PM_OPS(pca954x_pm, NULL, pca954x_resume); 346 347 static struct i2c_driver pca954x_driver = { 348 .driver = { 349 .name = "pca954x", 350 .pm = &pca954x_pm, 351 .of_match_table = of_match_ptr(pca954x_of_match), 352 .acpi_match_table = ACPI_PTR(pca954x_acpi_ids), 353 }, 354 .probe = pca954x_probe, 355 .remove = pca954x_remove, 356 .id_table = pca954x_id, 357 }; 358 359 module_i2c_driver(pca954x_driver); 360 361 MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>"); 362 MODULE_DESCRIPTION("PCA954x I2C mux/switch driver"); 363 MODULE_LICENSE("GPL v2"); 364