1 /* 2 * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 and 6 * only version 2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 #include <linux/kernel.h> 14 #include <linux/errno.h> 15 #include <linux/idr.h> 16 #include <linux/slab.h> 17 #include <linux/module.h> 18 #include <linux/of.h> 19 #include <linux/of_device.h> 20 #include <linux/platform_device.h> 21 #include <linux/spmi.h> 22 #include <linux/pm_runtime.h> 23 24 #include <dt-bindings/spmi/spmi.h> 25 26 static DEFINE_IDA(ctrl_ida); 27 28 static void spmi_dev_release(struct device *dev) 29 { 30 struct spmi_device *sdev = to_spmi_device(dev); 31 kfree(sdev); 32 } 33 34 static const struct device_type spmi_dev_type = { 35 .release = spmi_dev_release, 36 }; 37 38 static void spmi_ctrl_release(struct device *dev) 39 { 40 struct spmi_controller *ctrl = to_spmi_controller(dev); 41 ida_simple_remove(&ctrl_ida, ctrl->nr); 42 kfree(ctrl); 43 } 44 45 static const struct device_type spmi_ctrl_type = { 46 .release = spmi_ctrl_release, 47 }; 48 49 static int spmi_device_match(struct device *dev, struct device_driver *drv) 50 { 51 if (of_driver_match_device(dev, drv)) 52 return 1; 53 54 if (drv->name) 55 return strncmp(dev_name(dev), drv->name, 56 SPMI_NAME_SIZE) == 0; 57 58 return 0; 59 } 60 61 /** 62 * spmi_device_add() - add a device previously constructed via spmi_device_alloc() 63 * @sdev: spmi_device to be added 64 */ 65 int spmi_device_add(struct spmi_device *sdev) 66 { 67 struct spmi_controller *ctrl = sdev->ctrl; 68 int err; 69 70 dev_set_name(&sdev->dev, "%d-%02x", ctrl->nr, sdev->usid); 71 72 err = device_add(&sdev->dev); 73 if (err < 0) { 74 dev_err(&sdev->dev, "Can't add %s, status %d\n", 75 dev_name(&sdev->dev), err); 76 goto err_device_add; 77 } 78 79 dev_dbg(&sdev->dev, "device %s registered\n", dev_name(&sdev->dev)); 80 81 err_device_add: 82 return err; 83 } 84 EXPORT_SYMBOL_GPL(spmi_device_add); 85 86 /** 87 * spmi_device_remove(): remove an SPMI device 88 * @sdev: spmi_device to be removed 89 */ 90 void spmi_device_remove(struct spmi_device *sdev) 91 { 92 device_unregister(&sdev->dev); 93 } 94 EXPORT_SYMBOL_GPL(spmi_device_remove); 95 96 static inline int 97 spmi_cmd(struct spmi_controller *ctrl, u8 opcode, u8 sid) 98 { 99 if (!ctrl || !ctrl->cmd || ctrl->dev.type != &spmi_ctrl_type) 100 return -EINVAL; 101 102 return ctrl->cmd(ctrl, opcode, sid); 103 } 104 105 static inline int spmi_read_cmd(struct spmi_controller *ctrl, u8 opcode, 106 u8 sid, u16 addr, u8 *buf, size_t len) 107 { 108 if (!ctrl || !ctrl->read_cmd || ctrl->dev.type != &spmi_ctrl_type) 109 return -EINVAL; 110 111 return ctrl->read_cmd(ctrl, opcode, sid, addr, buf, len); 112 } 113 114 static inline int spmi_write_cmd(struct spmi_controller *ctrl, u8 opcode, 115 u8 sid, u16 addr, const u8 *buf, size_t len) 116 { 117 if (!ctrl || !ctrl->write_cmd || ctrl->dev.type != &spmi_ctrl_type) 118 return -EINVAL; 119 120 return ctrl->write_cmd(ctrl, opcode, sid, addr, buf, len); 121 } 122 123 /** 124 * spmi_register_read() - register read 125 * @sdev: SPMI device. 126 * @addr: slave register address (5-bit address). 127 * @buf: buffer to be populated with data from the Slave. 128 * 129 * Reads 1 byte of data from a Slave device register. 130 */ 131 int spmi_register_read(struct spmi_device *sdev, u8 addr, u8 *buf) 132 { 133 /* 5-bit register address */ 134 if (addr > 0x1F) 135 return -EINVAL; 136 137 return spmi_read_cmd(sdev->ctrl, SPMI_CMD_READ, sdev->usid, addr, 138 buf, 1); 139 } 140 EXPORT_SYMBOL_GPL(spmi_register_read); 141 142 /** 143 * spmi_ext_register_read() - extended register read 144 * @sdev: SPMI device. 145 * @addr: slave register address (8-bit address). 146 * @buf: buffer to be populated with data from the Slave. 147 * @len: the request number of bytes to read (up to 16 bytes). 148 * 149 * Reads up to 16 bytes of data from the extended register space on a 150 * Slave device. 151 */ 152 int spmi_ext_register_read(struct spmi_device *sdev, u8 addr, u8 *buf, 153 size_t len) 154 { 155 /* 8-bit register address, up to 16 bytes */ 156 if (len == 0 || len > 16) 157 return -EINVAL; 158 159 return spmi_read_cmd(sdev->ctrl, SPMI_CMD_EXT_READ, sdev->usid, addr, 160 buf, len); 161 } 162 EXPORT_SYMBOL_GPL(spmi_ext_register_read); 163 164 /** 165 * spmi_ext_register_readl() - extended register read long 166 * @sdev: SPMI device. 167 * @addr: slave register address (16-bit address). 168 * @buf: buffer to be populated with data from the Slave. 169 * @len: the request number of bytes to read (up to 8 bytes). 170 * 171 * Reads up to 8 bytes of data from the extended register space on a 172 * Slave device using 16-bit address. 173 */ 174 int spmi_ext_register_readl(struct spmi_device *sdev, u16 addr, u8 *buf, 175 size_t len) 176 { 177 /* 16-bit register address, up to 8 bytes */ 178 if (len == 0 || len > 8) 179 return -EINVAL; 180 181 return spmi_read_cmd(sdev->ctrl, SPMI_CMD_EXT_READL, sdev->usid, addr, 182 buf, len); 183 } 184 EXPORT_SYMBOL_GPL(spmi_ext_register_readl); 185 186 /** 187 * spmi_register_write() - register write 188 * @sdev: SPMI device 189 * @addr: slave register address (5-bit address). 190 * @data: buffer containing the data to be transferred to the Slave. 191 * 192 * Writes 1 byte of data to a Slave device register. 193 */ 194 int spmi_register_write(struct spmi_device *sdev, u8 addr, u8 data) 195 { 196 /* 5-bit register address */ 197 if (addr > 0x1F) 198 return -EINVAL; 199 200 return spmi_write_cmd(sdev->ctrl, SPMI_CMD_WRITE, sdev->usid, addr, 201 &data, 1); 202 } 203 EXPORT_SYMBOL_GPL(spmi_register_write); 204 205 /** 206 * spmi_register_zero_write() - register zero write 207 * @sdev: SPMI device. 208 * @data: the data to be written to register 0 (7-bits). 209 * 210 * Writes data to register 0 of the Slave device. 211 */ 212 int spmi_register_zero_write(struct spmi_device *sdev, u8 data) 213 { 214 return spmi_write_cmd(sdev->ctrl, SPMI_CMD_ZERO_WRITE, sdev->usid, 0, 215 &data, 1); 216 } 217 EXPORT_SYMBOL_GPL(spmi_register_zero_write); 218 219 /** 220 * spmi_ext_register_write() - extended register write 221 * @sdev: SPMI device. 222 * @addr: slave register address (8-bit address). 223 * @buf: buffer containing the data to be transferred to the Slave. 224 * @len: the request number of bytes to read (up to 16 bytes). 225 * 226 * Writes up to 16 bytes of data to the extended register space of a 227 * Slave device. 228 */ 229 int spmi_ext_register_write(struct spmi_device *sdev, u8 addr, const u8 *buf, 230 size_t len) 231 { 232 /* 8-bit register address, up to 16 bytes */ 233 if (len == 0 || len > 16) 234 return -EINVAL; 235 236 return spmi_write_cmd(sdev->ctrl, SPMI_CMD_EXT_WRITE, sdev->usid, addr, 237 buf, len); 238 } 239 EXPORT_SYMBOL_GPL(spmi_ext_register_write); 240 241 /** 242 * spmi_ext_register_writel() - extended register write long 243 * @sdev: SPMI device. 244 * @addr: slave register address (16-bit address). 245 * @buf: buffer containing the data to be transferred to the Slave. 246 * @len: the request number of bytes to read (up to 8 bytes). 247 * 248 * Writes up to 8 bytes of data to the extended register space of a 249 * Slave device using 16-bit address. 250 */ 251 int spmi_ext_register_writel(struct spmi_device *sdev, u16 addr, const u8 *buf, 252 size_t len) 253 { 254 /* 4-bit Slave Identifier, 16-bit register address, up to 8 bytes */ 255 if (len == 0 || len > 8) 256 return -EINVAL; 257 258 return spmi_write_cmd(sdev->ctrl, SPMI_CMD_EXT_WRITEL, sdev->usid, 259 addr, buf, len); 260 } 261 EXPORT_SYMBOL_GPL(spmi_ext_register_writel); 262 263 /** 264 * spmi_command_reset() - sends RESET command to the specified slave 265 * @sdev: SPMI device. 266 * 267 * The Reset command initializes the Slave and forces all registers to 268 * their reset values. The Slave shall enter the STARTUP state after 269 * receiving a Reset command. 270 */ 271 int spmi_command_reset(struct spmi_device *sdev) 272 { 273 return spmi_cmd(sdev->ctrl, SPMI_CMD_RESET, sdev->usid); 274 } 275 EXPORT_SYMBOL_GPL(spmi_command_reset); 276 277 /** 278 * spmi_command_sleep() - sends SLEEP command to the specified SPMI device 279 * @sdev: SPMI device. 280 * 281 * The Sleep command causes the Slave to enter the user defined SLEEP state. 282 */ 283 int spmi_command_sleep(struct spmi_device *sdev) 284 { 285 return spmi_cmd(sdev->ctrl, SPMI_CMD_SLEEP, sdev->usid); 286 } 287 EXPORT_SYMBOL_GPL(spmi_command_sleep); 288 289 /** 290 * spmi_command_wakeup() - sends WAKEUP command to the specified SPMI device 291 * @sdev: SPMI device. 292 * 293 * The Wakeup command causes the Slave to move from the SLEEP state to 294 * the ACTIVE state. 295 */ 296 int spmi_command_wakeup(struct spmi_device *sdev) 297 { 298 return spmi_cmd(sdev->ctrl, SPMI_CMD_WAKEUP, sdev->usid); 299 } 300 EXPORT_SYMBOL_GPL(spmi_command_wakeup); 301 302 /** 303 * spmi_command_shutdown() - sends SHUTDOWN command to the specified SPMI device 304 * @sdev: SPMI device. 305 * 306 * The Shutdown command causes the Slave to enter the SHUTDOWN state. 307 */ 308 int spmi_command_shutdown(struct spmi_device *sdev) 309 { 310 return spmi_cmd(sdev->ctrl, SPMI_CMD_SHUTDOWN, sdev->usid); 311 } 312 EXPORT_SYMBOL_GPL(spmi_command_shutdown); 313 314 static int spmi_drv_probe(struct device *dev) 315 { 316 const struct spmi_driver *sdrv = to_spmi_driver(dev->driver); 317 struct spmi_device *sdev = to_spmi_device(dev); 318 int err; 319 320 pm_runtime_get_noresume(dev); 321 pm_runtime_set_active(dev); 322 pm_runtime_enable(dev); 323 324 err = sdrv->probe(sdev); 325 if (err) 326 goto fail_probe; 327 328 return 0; 329 330 fail_probe: 331 pm_runtime_disable(dev); 332 pm_runtime_set_suspended(dev); 333 pm_runtime_put_noidle(dev); 334 return err; 335 } 336 337 static int spmi_drv_remove(struct device *dev) 338 { 339 const struct spmi_driver *sdrv = to_spmi_driver(dev->driver); 340 341 pm_runtime_get_sync(dev); 342 sdrv->remove(to_spmi_device(dev)); 343 pm_runtime_put_noidle(dev); 344 345 pm_runtime_disable(dev); 346 pm_runtime_set_suspended(dev); 347 pm_runtime_put_noidle(dev); 348 return 0; 349 } 350 351 static struct bus_type spmi_bus_type = { 352 .name = "spmi", 353 .match = spmi_device_match, 354 .probe = spmi_drv_probe, 355 .remove = spmi_drv_remove, 356 }; 357 358 /** 359 * spmi_controller_alloc() - Allocate a new SPMI device 360 * @ctrl: associated controller 361 * 362 * Caller is responsible for either calling spmi_device_add() to add the 363 * newly allocated controller, or calling spmi_device_put() to discard it. 364 */ 365 struct spmi_device *spmi_device_alloc(struct spmi_controller *ctrl) 366 { 367 struct spmi_device *sdev; 368 369 sdev = kzalloc(sizeof(*sdev), GFP_KERNEL); 370 if (!sdev) 371 return NULL; 372 373 sdev->ctrl = ctrl; 374 device_initialize(&sdev->dev); 375 sdev->dev.parent = &ctrl->dev; 376 sdev->dev.bus = &spmi_bus_type; 377 sdev->dev.type = &spmi_dev_type; 378 return sdev; 379 } 380 EXPORT_SYMBOL_GPL(spmi_device_alloc); 381 382 /** 383 * spmi_controller_alloc() - Allocate a new SPMI controller 384 * @parent: parent device 385 * @size: size of private data 386 * 387 * Caller is responsible for either calling spmi_controller_add() to add the 388 * newly allocated controller, or calling spmi_controller_put() to discard it. 389 * The allocated private data region may be accessed via 390 * spmi_controller_get_drvdata() 391 */ 392 struct spmi_controller *spmi_controller_alloc(struct device *parent, 393 size_t size) 394 { 395 struct spmi_controller *ctrl; 396 int id; 397 398 if (WARN_ON(!parent)) 399 return NULL; 400 401 ctrl = kzalloc(sizeof(*ctrl) + size, GFP_KERNEL); 402 if (!ctrl) 403 return NULL; 404 405 device_initialize(&ctrl->dev); 406 ctrl->dev.type = &spmi_ctrl_type; 407 ctrl->dev.bus = &spmi_bus_type; 408 ctrl->dev.parent = parent; 409 ctrl->dev.of_node = parent->of_node; 410 spmi_controller_set_drvdata(ctrl, &ctrl[1]); 411 412 id = ida_simple_get(&ctrl_ida, 0, 0, GFP_KERNEL); 413 if (id < 0) { 414 dev_err(parent, 415 "unable to allocate SPMI controller identifier.\n"); 416 spmi_controller_put(ctrl); 417 return NULL; 418 } 419 420 ctrl->nr = id; 421 dev_set_name(&ctrl->dev, "spmi-%d", id); 422 423 dev_dbg(&ctrl->dev, "allocated controller 0x%p id %d\n", ctrl, id); 424 return ctrl; 425 } 426 EXPORT_SYMBOL_GPL(spmi_controller_alloc); 427 428 static void of_spmi_register_devices(struct spmi_controller *ctrl) 429 { 430 struct device_node *node; 431 int err; 432 433 if (!ctrl->dev.of_node) 434 return; 435 436 for_each_available_child_of_node(ctrl->dev.of_node, node) { 437 struct spmi_device *sdev; 438 u32 reg[2]; 439 440 dev_dbg(&ctrl->dev, "adding child %s\n", node->full_name); 441 442 err = of_property_read_u32_array(node, "reg", reg, 2); 443 if (err) { 444 dev_err(&ctrl->dev, 445 "node %s err (%d) does not have 'reg' property\n", 446 node->full_name, err); 447 continue; 448 } 449 450 if (reg[1] != SPMI_USID) { 451 dev_err(&ctrl->dev, 452 "node %s contains unsupported 'reg' entry\n", 453 node->full_name); 454 continue; 455 } 456 457 if (reg[0] >= SPMI_MAX_SLAVE_ID) { 458 dev_err(&ctrl->dev, 459 "invalid usid on node %s\n", 460 node->full_name); 461 continue; 462 } 463 464 dev_dbg(&ctrl->dev, "read usid %02x\n", reg[0]); 465 466 sdev = spmi_device_alloc(ctrl); 467 if (!sdev) 468 continue; 469 470 sdev->dev.of_node = node; 471 sdev->usid = (u8) reg[0]; 472 473 err = spmi_device_add(sdev); 474 if (err) { 475 dev_err(&sdev->dev, 476 "failure adding device. status %d\n", err); 477 spmi_device_put(sdev); 478 } 479 } 480 } 481 482 /** 483 * spmi_controller_add() - Add an SPMI controller 484 * @ctrl: controller to be registered. 485 * 486 * Register a controller previously allocated via spmi_controller_alloc() with 487 * the SPMI core. 488 */ 489 int spmi_controller_add(struct spmi_controller *ctrl) 490 { 491 int ret; 492 493 /* Can't register until after driver model init */ 494 if (WARN_ON(!spmi_bus_type.p)) 495 return -EAGAIN; 496 497 ret = device_add(&ctrl->dev); 498 if (ret) 499 return ret; 500 501 if (IS_ENABLED(CONFIG_OF)) 502 of_spmi_register_devices(ctrl); 503 504 dev_dbg(&ctrl->dev, "spmi-%d registered: dev:%p\n", 505 ctrl->nr, &ctrl->dev); 506 507 return 0; 508 }; 509 EXPORT_SYMBOL_GPL(spmi_controller_add); 510 511 /* Remove a device associated with a controller */ 512 static int spmi_ctrl_remove_device(struct device *dev, void *data) 513 { 514 struct spmi_device *spmidev = to_spmi_device(dev); 515 if (dev->type == &spmi_dev_type) 516 spmi_device_remove(spmidev); 517 return 0; 518 } 519 520 /** 521 * spmi_controller_remove(): remove an SPMI controller 522 * @ctrl: controller to remove 523 * 524 * Remove a SPMI controller. Caller is responsible for calling 525 * spmi_controller_put() to discard the allocated controller. 526 */ 527 void spmi_controller_remove(struct spmi_controller *ctrl) 528 { 529 int dummy; 530 531 if (!ctrl) 532 return; 533 534 dummy = device_for_each_child(&ctrl->dev, NULL, 535 spmi_ctrl_remove_device); 536 device_del(&ctrl->dev); 537 } 538 EXPORT_SYMBOL_GPL(spmi_controller_remove); 539 540 /** 541 * spmi_driver_register() - Register client driver with SPMI core 542 * @sdrv: client driver to be associated with client-device. 543 * 544 * This API will register the client driver with the SPMI framework. 545 * It is typically called from the driver's module-init function. 546 */ 547 int spmi_driver_register(struct spmi_driver *sdrv) 548 { 549 sdrv->driver.bus = &spmi_bus_type; 550 return driver_register(&sdrv->driver); 551 } 552 EXPORT_SYMBOL_GPL(spmi_driver_register); 553 554 static void __exit spmi_exit(void) 555 { 556 bus_unregister(&spmi_bus_type); 557 } 558 module_exit(spmi_exit); 559 560 static int __init spmi_init(void) 561 { 562 return bus_register(&spmi_bus_type); 563 } 564 postcore_initcall(spmi_init); 565 566 MODULE_LICENSE("GPL v2"); 567 MODULE_DESCRIPTION("SPMI module"); 568 MODULE_ALIAS("platform:spmi"); 569