Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.13-rc3 415 lines 13 kB view raw
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Linux I2C core OF component prober code 4 * 5 * Copyright (C) 2024 Google LLC 6 */ 7 8#include <linux/cleanup.h> 9#include <linux/delay.h> 10#include <linux/device.h> 11#include <linux/dev_printk.h> 12#include <linux/err.h> 13#include <linux/gpio/consumer.h> 14#include <linux/i2c.h> 15#include <linux/i2c-of-prober.h> 16#include <linux/module.h> 17#include <linux/of.h> 18#include <linux/regulator/consumer.h> 19#include <linux/slab.h> 20#include <linux/stddef.h> 21 22/* 23 * Some devices, such as Google Hana Chromebooks, are produced by multiple 24 * vendors each using their preferred components. Such components are all 25 * in the device tree. Instead of having all of them enabled and having each 26 * driver separately try and probe its device while fighting over shared 27 * resources, they can be marked as "fail-needs-probe" and have a prober 28 * figure out which one is actually used beforehand. 29 * 30 * This prober assumes such drop-in parts are on the same I2C bus, have 31 * non-conflicting addresses, and can be directly probed by seeing which 32 * address responds. 33 * 34 * TODO: 35 * - Support I2C muxes 36 */ 37 38static struct device_node *i2c_of_probe_get_i2c_node(struct device *dev, const char *type) 39{ 40 struct device_node *node __free(device_node) = of_find_node_by_name(NULL, type); 41 if (!node) { 42 dev_err(dev, "Could not find %s device node\n", type); 43 return NULL; 44 } 45 46 struct device_node *i2c_node __free(device_node) = of_get_parent(node); 47 if (!of_node_name_eq(i2c_node, "i2c")) { 48 dev_err(dev, "%s device isn't on I2C bus\n", type); 49 return NULL; 50 } 51 52 if (!of_device_is_available(i2c_node)) { 53 dev_err(dev, "I2C controller not available\n"); 54 return NULL; 55 } 56 57 return no_free_ptr(i2c_node); 58} 59 60static int i2c_of_probe_enable_node(struct device *dev, struct device_node *node) 61{ 62 int ret; 63 64 dev_dbg(dev, "Enabling %pOF\n", node); 65 66 struct of_changeset *ocs __free(kfree) = kzalloc(sizeof(*ocs), GFP_KERNEL); 67 if (!ocs) 68 return -ENOMEM; 69 70 of_changeset_init(ocs); 71 ret = of_changeset_update_prop_string(ocs, node, "status", "okay"); 72 if (ret) 73 return ret; 74 75 ret = of_changeset_apply(ocs); 76 if (ret) { 77 /* ocs needs to be explicitly cleaned up before being freed. */ 78 of_changeset_destroy(ocs); 79 } else { 80 /* 81 * ocs is intentionally kept around as it needs to 82 * exist as long as the change is applied. 83 */ 84 void *ptr __always_unused = no_free_ptr(ocs); 85 } 86 87 return ret; 88} 89 90static const struct i2c_of_probe_ops i2c_of_probe_dummy_ops; 91 92/** 93 * i2c_of_probe_component() - probe for devices of "type" on the same i2c bus 94 * @dev: Pointer to the &struct device of the caller, only used for dev_printk() messages. 95 * @cfg: Pointer to the &struct i2c_of_probe_cfg containing callbacks and other options 96 * for the prober. 97 * @ctx: Context data for callbacks. 98 * 99 * Probe for possible I2C components of the same "type" (&i2c_of_probe_cfg->type) 100 * on the same I2C bus that have their status marked as "fail-needs-probe". 101 * 102 * Assumes that across the entire device tree the only instances of nodes 103 * with "type" prefixed node names (not including the address portion) are 104 * the ones that need handling for second source components. In other words, 105 * if "type" is "touchscreen", then all device nodes named "touchscreen*" 106 * are the ones that need probing. There cannot be another "touchscreen*" 107 * node that is already enabled. 108 * 109 * Assumes that for each "type" of component, only one actually exists. In 110 * other words, only one matching and existing device will be enabled. 111 * 112 * Context: Process context only. Does non-atomic I2C transfers. 113 * Should only be used from a driver probe function, as the function 114 * can return -EPROBE_DEFER if the I2C adapter or other resources 115 * are unavailable. 116 * Return: 0 on success or no-op, error code otherwise. 117 * A no-op can happen when it seems like the device tree already 118 * has components of the type to be probed already enabled. This 119 * can happen when the device tree had not been updated to mark 120 * the status of the to-be-probed components as "fail-needs-probe". 121 * Or this function was already run with the same parameters and 122 * succeeded in enabling a component. The latter could happen if 123 * the user had multiple types of components to probe, and one of 124 * them down the list caused a deferred probe. This is expected 125 * behavior. 126 */ 127int i2c_of_probe_component(struct device *dev, const struct i2c_of_probe_cfg *cfg, void *ctx) 128{ 129 const struct i2c_of_probe_ops *ops; 130 const char *type; 131 struct i2c_adapter *i2c; 132 int ret; 133 134 ops = cfg->ops ?: &i2c_of_probe_dummy_ops; 135 type = cfg->type; 136 137 struct device_node *i2c_node __free(device_node) = i2c_of_probe_get_i2c_node(dev, type); 138 if (!i2c_node) 139 return -ENODEV; 140 141 /* 142 * If any devices of the given "type" are already enabled then this function is a no-op. 143 * Either the device tree hasn't been modified to work with this probe function, or the 144 * function had already run before and enabled some component. 145 */ 146 for_each_child_of_node_with_prefix(i2c_node, node, type) 147 if (of_device_is_available(node)) 148 return 0; 149 150 i2c = of_get_i2c_adapter_by_node(i2c_node); 151 if (!i2c) 152 return dev_err_probe(dev, -EPROBE_DEFER, "Couldn't get I2C adapter\n"); 153 154 /* Grab and enable resources */ 155 ret = 0; 156 if (ops->enable) 157 ret = ops->enable(dev, i2c_node, ctx); 158 if (ret) 159 goto out_put_i2c_adapter; 160 161 for_each_child_of_node_with_prefix(i2c_node, node, type) { 162 union i2c_smbus_data data; 163 u32 addr; 164 165 if (of_property_read_u32(node, "reg", &addr)) 166 continue; 167 if (i2c_smbus_xfer(i2c, addr, 0, I2C_SMBUS_READ, 0, I2C_SMBUS_BYTE, &data) < 0) 168 continue; 169 170 /* Found a device that is responding */ 171 if (ops->cleanup_early) 172 ops->cleanup_early(dev, ctx); 173 ret = i2c_of_probe_enable_node(dev, node); 174 break; 175 } 176 177 if (ops->cleanup) 178 ops->cleanup(dev, ctx); 179out_put_i2c_adapter: 180 i2c_put_adapter(i2c); 181 182 return ret; 183} 184EXPORT_SYMBOL_NS_GPL(i2c_of_probe_component, "I2C_OF_PROBER"); 185 186static int i2c_of_probe_simple_get_supply(struct device *dev, struct device_node *node, 187 struct i2c_of_probe_simple_ctx *ctx) 188{ 189 const char *supply_name; 190 struct regulator *supply; 191 192 /* 193 * It's entirely possible for the component's device node to not have the 194 * regulator supplies. While it does not make sense from a hardware perspective, 195 * the supplies could be always on or otherwise not modeled in the device tree, 196 * but the device would still work. 197 */ 198 supply_name = ctx->opts->supply_name; 199 if (!supply_name) 200 return 0; 201 202 supply = of_regulator_get_optional(dev, node, supply_name); 203 if (IS_ERR(supply)) { 204 return dev_err_probe(dev, PTR_ERR(supply), 205 "Failed to get regulator supply \"%s\" from %pOF\n", 206 supply_name, node); 207 } 208 209 ctx->supply = supply; 210 211 return 0; 212} 213 214static void i2c_of_probe_simple_put_supply(struct i2c_of_probe_simple_ctx *ctx) 215{ 216 regulator_put(ctx->supply); 217 ctx->supply = NULL; 218} 219 220static int i2c_of_probe_simple_enable_regulator(struct device *dev, struct i2c_of_probe_simple_ctx *ctx) 221{ 222 int ret; 223 224 if (!ctx->supply) 225 return 0; 226 227 dev_dbg(dev, "Enabling regulator supply \"%s\"\n", ctx->opts->supply_name); 228 229 ret = regulator_enable(ctx->supply); 230 if (ret) 231 return ret; 232 233 if (ctx->opts->post_power_on_delay_ms) 234 msleep(ctx->opts->post_power_on_delay_ms); 235 236 return 0; 237} 238 239static void i2c_of_probe_simple_disable_regulator(struct device *dev, struct i2c_of_probe_simple_ctx *ctx) 240{ 241 if (!ctx->supply) 242 return; 243 244 dev_dbg(dev, "Disabling regulator supply \"%s\"\n", ctx->opts->supply_name); 245 246 regulator_disable(ctx->supply); 247} 248 249static int i2c_of_probe_simple_get_gpiod(struct device *dev, struct device_node *node, 250 struct i2c_of_probe_simple_ctx *ctx) 251{ 252 struct fwnode_handle *fwnode = of_fwnode_handle(node); 253 struct gpio_desc *gpiod; 254 const char *con_id; 255 256 /* NULL signals no GPIO needed */ 257 if (!ctx->opts->gpio_name) 258 return 0; 259 260 /* An empty string signals an unnamed GPIO */ 261 if (!ctx->opts->gpio_name[0]) 262 con_id = NULL; 263 else 264 con_id = ctx->opts->gpio_name; 265 266 gpiod = fwnode_gpiod_get_index(fwnode, con_id, 0, GPIOD_ASIS, "i2c-of-prober"); 267 if (IS_ERR(gpiod)) 268 return PTR_ERR(gpiod); 269 270 ctx->gpiod = gpiod; 271 272 return 0; 273} 274 275static void i2c_of_probe_simple_put_gpiod(struct i2c_of_probe_simple_ctx *ctx) 276{ 277 gpiod_put(ctx->gpiod); 278 ctx->gpiod = NULL; 279} 280 281static int i2c_of_probe_simple_set_gpio(struct device *dev, struct i2c_of_probe_simple_ctx *ctx) 282{ 283 int ret; 284 285 if (!ctx->gpiod) 286 return 0; 287 288 dev_dbg(dev, "Configuring GPIO\n"); 289 290 ret = gpiod_direction_output(ctx->gpiod, ctx->opts->gpio_assert_to_enable); 291 if (ret) 292 return ret; 293 294 if (ctx->opts->post_gpio_config_delay_ms) 295 msleep(ctx->opts->post_gpio_config_delay_ms); 296 297 return 0; 298} 299 300static void i2c_of_probe_simple_disable_gpio(struct device *dev, struct i2c_of_probe_simple_ctx *ctx) 301{ 302 gpiod_set_value(ctx->gpiod, !ctx->opts->gpio_assert_to_enable); 303} 304 305/** 306 * i2c_of_probe_simple_enable - Simple helper for I2C OF prober to get and enable resources 307 * @dev: Pointer to the &struct device of the caller, only used for dev_printk() messages 308 * @bus_node: Pointer to the &struct device_node of the I2C adapter. 309 * @data: Pointer to &struct i2c_of_probe_simple_ctx helper context. 310 * 311 * If &i2c_of_probe_simple_opts->supply_name is given, request the named regulator supply. 312 * If &i2c_of_probe_simple_opts->gpio_name is given, request the named GPIO. Or if it is 313 * the empty string, request the unnamed GPIO. 314 * If a regulator supply was found, enable that regulator. 315 * If a GPIO line was found, configure the GPIO line to output and set value 316 * according to given options. 317 * 318 * Return: %0 on success or no-op, or a negative error number on failure. 319 */ 320int i2c_of_probe_simple_enable(struct device *dev, struct device_node *bus_node, void *data) 321{ 322 struct i2c_of_probe_simple_ctx *ctx = data; 323 struct device_node *node; 324 const char *compat; 325 int ret; 326 327 dev_dbg(dev, "Requesting resources for components under I2C bus %pOF\n", bus_node); 328 329 if (!ctx || !ctx->opts) 330 return -EINVAL; 331 332 compat = ctx->opts->res_node_compatible; 333 if (!compat) 334 return -EINVAL; 335 336 node = of_get_compatible_child(bus_node, compat); 337 if (!node) 338 return dev_err_probe(dev, -ENODEV, "No device compatible with \"%s\" found\n", 339 compat); 340 341 ret = i2c_of_probe_simple_get_supply(dev, node, ctx); 342 if (ret) 343 goto out_put_node; 344 345 ret = i2c_of_probe_simple_get_gpiod(dev, node, ctx); 346 if (ret) 347 goto out_put_supply; 348 349 ret = i2c_of_probe_simple_enable_regulator(dev, ctx); 350 if (ret) 351 goto out_put_gpiod; 352 353 ret = i2c_of_probe_simple_set_gpio(dev, ctx); 354 if (ret) 355 goto out_disable_regulator; 356 357 return 0; 358 359out_disable_regulator: 360 i2c_of_probe_simple_disable_regulator(dev, ctx); 361out_put_gpiod: 362 i2c_of_probe_simple_put_gpiod(ctx); 363out_put_supply: 364 i2c_of_probe_simple_put_supply(ctx); 365out_put_node: 366 of_node_put(node); 367 return ret; 368} 369EXPORT_SYMBOL_NS_GPL(i2c_of_probe_simple_enable, "I2C_OF_PROBER"); 370 371/** 372 * i2c_of_probe_simple_cleanup_early - \ 373 * Simple helper for I2C OF prober to release GPIOs before component is enabled 374 * @dev: Pointer to the &struct device of the caller; unused. 375 * @data: Pointer to &struct i2c_of_probe_simple_ctx helper context. 376 * 377 * GPIO descriptors are exclusive and have to be released before the 378 * actual driver probes so that the latter can acquire them. 379 */ 380void i2c_of_probe_simple_cleanup_early(struct device *dev, void *data) 381{ 382 struct i2c_of_probe_simple_ctx *ctx = data; 383 384 i2c_of_probe_simple_put_gpiod(ctx); 385} 386EXPORT_SYMBOL_NS_GPL(i2c_of_probe_simple_cleanup_early, "I2C_OF_PROBER"); 387 388/** 389 * i2c_of_probe_simple_cleanup - Clean up and release resources for I2C OF prober simple helpers 390 * @dev: Pointer to the &struct device of the caller, only used for dev_printk() messages 391 * @data: Pointer to &struct i2c_of_probe_simple_ctx helper context. 392 * 393 * * If a GPIO line was found and not yet released, set its value to the opposite of that 394 * set in i2c_of_probe_simple_enable() and release it. 395 * * If a regulator supply was found, disable that regulator and release it. 396 */ 397void i2c_of_probe_simple_cleanup(struct device *dev, void *data) 398{ 399 struct i2c_of_probe_simple_ctx *ctx = data; 400 401 /* GPIO operations here are no-ops if i2c_of_probe_simple_cleanup_early was called. */ 402 i2c_of_probe_simple_disable_gpio(dev, ctx); 403 i2c_of_probe_simple_put_gpiod(ctx); 404 405 i2c_of_probe_simple_disable_regulator(dev, ctx); 406 i2c_of_probe_simple_put_supply(ctx); 407} 408EXPORT_SYMBOL_NS_GPL(i2c_of_probe_simple_cleanup, "I2C_OF_PROBER"); 409 410struct i2c_of_probe_ops i2c_of_probe_simple_ops = { 411 .enable = i2c_of_probe_simple_enable, 412 .cleanup_early = i2c_of_probe_simple_cleanup_early, 413 .cleanup = i2c_of_probe_simple_cleanup, 414}; 415EXPORT_SYMBOL_NS_GPL(i2c_of_probe_simple_ops, "I2C_OF_PROBER");