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