blob: f0c7aa9ac01f855a464661bd9e9a13978790e8d8 [file] [log] [blame]
Banajit Goswamide8271c2017-01-18 00:28:59 -08001/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include <linux/kernel.h>
14#include <linux/module.h>
15#include <linux/errno.h>
16#include <linux/slab.h>
17#include <linux/init.h>
18#include <linux/types.h>
19#include <linux/of_device.h>
20#include <linux/completion.h>
21#include <linux/idr.h>
22#include <linux/pm_runtime.h>
23#include <linux/soundwire/soundwire.h>
24
25struct boardinfo {
26 struct list_head list;
27 struct swr_boardinfo board_info;
28};
29
30static LIST_HEAD(board_list);
31static LIST_HEAD(swr_master_list);
32static DEFINE_MUTEX(board_lock);
33static DEFINE_IDR(master_idr);
34static DEFINE_MUTEX(swr_lock);
35
36static struct device_type swr_dev_type;
37
38#define SOUNDWIRE_NAME_SIZE 32
39
40static void swr_master_put(struct swr_master *master)
41{
42 if (master)
43 put_device(&master->dev);
44}
45
46static struct swr_master *swr_master_get(struct swr_master *master)
47{
48 if (!master || !get_device(&master->dev))
49 return NULL;
50 return master;
51}
52
53static void swr_dev_release(struct device *dev)
54{
55 struct swr_device *swr_dev = to_swr_device(dev);
56 struct swr_master *master;
57
58 if (!swr_dev)
59 return;
60 master = swr_dev->master;
61 if (!master)
62 return;
63 mutex_lock(&master->mlock);
64 list_del_init(&swr_dev->dev_list);
65 mutex_unlock(&master->mlock);
66 swr_master_put(swr_dev->master);
67 kfree(swr_dev);
68}
69
70/**
Karthikeyan Manid52d5792017-04-04 14:09:09 -070071 * swr_remove_device - remove a soundwire device
72 * @swr_dev: soundwire device to remove
73 *
74 * Remove a soundwire device. Go through the soundwire
75 * device list that master has and remove swr_dev from
76 * it.
77 */
78void swr_remove_device(struct swr_device *swr_dev)
79{
80 struct swr_device *swr_dev_loop, *safe;
81
82 list_for_each_entry_safe(swr_dev_loop, safe,
83 &swr_dev->master->devices,
84 dev_list) {
85 if (swr_dev == swr_dev_loop)
86 list_del(&swr_dev_loop->dev_list);
87 }
88}
89EXPORT_SYMBOL(swr_remove_device);
90
91/**
Banajit Goswamide8271c2017-01-18 00:28:59 -080092 * swr_new_device - instantiate a new soundwire device
93 * @master: Controller to which device is connected
94 * @info: Describes the soundwire device
95 * Context: can sleep
96 *
97 * Create a soundwire device. Binding is handled through driver model
98 * probe/remove methods. A driver may be bound to this device when
99 * the function gets returned.
100 *
101 * Returns a soundwire new device or NULL
102 */
103struct swr_device *swr_new_device(struct swr_master *master,
104 struct swr_boardinfo const *info)
105{
106 int result;
107 struct swr_device *swr;
108
109 if (!master || !swr_master_get(master)) {
110 pr_err("%s: master is NULL\n", __func__);
111 return NULL;
112 }
113
114 swr = kzalloc(sizeof(*swr), GFP_KERNEL);
115 if (!swr) {
116 put_device(&master->dev);
117 return NULL;
118 }
119 swr->master = master;
120 swr->addr = info->addr;
121 strlcpy(swr->name, info->name, sizeof(swr->name));
122 swr->dev.type = &swr_dev_type;
123 swr->dev.parent = &master->dev;
124 swr->dev.bus = &soundwire_type;
125 swr->dev.release = swr_dev_release;
126 swr->dev.of_node = info->of_node;
127 mutex_lock(&master->mlock);
128 list_add_tail(&swr->dev_list, &master->devices);
129 mutex_unlock(&master->mlock);
130
131 dev_set_name(&swr->dev, "%s.%lx", swr->name, swr->addr);
132 result = device_register(&swr->dev);
133 if (result) {
134 dev_err(&master->dev, "device [%s] register failed err %d\n",
135 swr->name, result);
136 goto err_out;
137 }
138 dev_dbg(&master->dev, "Device [%s] registered with bus id %s\n",
139 swr->name, dev_name(&swr->dev));
140 return swr;
141
142err_out:
143 dev_dbg(&master->dev, "Failed to register swr device %s at 0x%lx %d\n",
144 swr->name, swr->addr, result);
145 swr_master_put(master);
146 kfree(swr);
147 return NULL;
148}
149EXPORT_SYMBOL(swr_new_device);
150
151/**
Banajit Goswamide8271c2017-01-18 00:28:59 -0800152 * of_register_swr_devices - register child devices on to the soundwire bus
153 * @master: pointer to soundwire master device
154 *
155 * Registers a soundwire device for each child node of master node which has
156 * a "swr-devid" property
157 *
158 */
159int of_register_swr_devices(struct swr_master *master)
160{
161 struct swr_device *swr;
162 struct device_node *node;
163
164 if (!master->dev.of_node)
165 return -EINVAL;
166
167 for_each_available_child_of_node(master->dev.of_node, node) {
168 struct swr_boardinfo info = {};
169 u64 addr;
170
171 dev_dbg(&master->dev, "of_swr:register %s\n", node->full_name);
172
173 if (of_modalias_node(node, info.name, sizeof(info.name)) < 0) {
174 dev_err(&master->dev, "of_swr:modalias failure %s\n",
175 node->full_name);
176 continue;
177 }
178 if (of_property_read_u64(node, "reg", &addr)) {
179 dev_err(&master->dev, "of_swr:invalid reg %s\n",
180 node->full_name);
181 continue;
182 }
183 info.addr = addr;
184 info.of_node = of_node_get(node);
Karthikeyan Manie398f182017-05-03 15:21:21 -0700185 master->num_dev++;
Banajit Goswamide8271c2017-01-18 00:28:59 -0800186 swr = swr_new_device(master, &info);
187 if (!swr) {
188 dev_err(&master->dev, "of_swr: Register failed %s\n",
189 node->full_name);
190 of_node_put(node);
Karthikeyan Manie398f182017-05-03 15:21:21 -0700191 master->num_dev--;
Banajit Goswamide8271c2017-01-18 00:28:59 -0800192 continue;
193 }
Banajit Goswamide8271c2017-01-18 00:28:59 -0800194 }
195 return 0;
196}
197EXPORT_SYMBOL(of_register_swr_devices);
198
199/**
200 * swr_port_response - response from master to free the completed transaction
201 * @mstr: pointer to soundwire master device
202 * @tid: transaction id that indicates transaction to be freed.
203 *
204 * Master calls this function to free the compeleted transaction memory
205 */
206void swr_port_response(struct swr_master *mstr, u8 tid)
207{
208 struct swr_params *txn;
209
210 txn = mstr->port_txn[tid];
211
212 if (txn == NULL) {
213 dev_err(&mstr->dev, "%s: transaction is already NULL\n",
214 __func__);
215 return;
216 }
217 mstr->port_txn[tid] = NULL;
218 kfree(txn);
219}
220EXPORT_SYMBOL(swr_port_response);
221
222/**
223 * swr_remove_from_group - remove soundwire slave devices from group
224 * @dev: pointer to the soundwire slave device
225 * dev_num: device number of the soundwire slave device
226 *
227 * Returns error code for failure and 0 for success
228 */
229int swr_remove_from_group(struct swr_device *dev, u8 dev_num)
230{
231 struct swr_master *master;
232
233 if (!dev)
234 return -ENODEV;
235
236 master = dev->master;
237 if (!master)
238 return -EINVAL;
239
240 if (!dev->group_id)
241 return 0;
242
243 if (master->gr_sid == dev_num)
244 return 0;
245
246 if (master->remove_from_group && master->remove_from_group(master))
247 dev_dbg(&master->dev, "%s: falling back to GROUP_NONE\n",
248 __func__);
249
250 return 0;
251}
252EXPORT_SYMBOL(swr_remove_from_group);
253
254/**
255 * swr_slvdev_datapath_control - Enables/Disables soundwire slave device
256 * data path
257 * @dev: pointer to soundwire slave device
258 * @dev_num: device number of the soundwire slave device
259 *
260 * Returns error code for failure and 0 for success
261 */
262int swr_slvdev_datapath_control(struct swr_device *dev, u8 dev_num,
263 bool enable)
264{
265 struct swr_master *master;
266
267 if (!dev)
268 return -ENODEV;
269
270 master = dev->master;
271 if (!master)
272 return -EINVAL;
273
274 if (dev->group_id) {
275 /* Broadcast */
276 if (master->gr_sid != dev_num) {
277 if (!master->gr_sid)
278 master->gr_sid = dev_num;
279 else
280 return 0;
281 }
282 }
283
284 if (master->slvdev_datapath_control)
285 master->slvdev_datapath_control(master, enable);
286
287 return 0;
288}
289EXPORT_SYMBOL(swr_slvdev_datapath_control);
290
291/**
292 * swr_connect_port - enable soundwire slave port(s)
293 * @dev: pointer to soundwire slave device
294 * @port_id: logical port id(s) of soundwire slave device
295 * @num_port: number of slave device ports need to be enabled
296 * @ch_mask: channels for each port that needs to be enabled
297 * @ch_rate: rate at which each port/channels operate
298 * @num_ch: number of channels for each port
299 *
300 * soundwire slave device call swr_connect_port API to enable all/some of
301 * its ports and corresponding channels and channel rate. This API will
302 * call master connect_port callback function to calculate frame structure
303 * and enable master and slave ports
304 */
305int swr_connect_port(struct swr_device *dev, u8 *port_id, u8 num_port,
306 u8 *ch_mask, u32 *ch_rate, u8 *num_ch)
307{
308 u8 i = 0;
309 int ret = 0;
310 struct swr_params *txn = NULL;
311 struct swr_params **temp_txn = NULL;
312 struct swr_master *master = dev->master;
313
314 if (!master) {
315 pr_err("%s: Master is NULL\n", __func__);
316 return -EINVAL;
317 }
318 if (num_port > SWR_MAX_DEV_PORT_NUM) {
319 dev_err(&master->dev, "%s: num_port %d exceeds max port %d\n",
320 __func__, num_port, SWR_MAX_DEV_PORT_NUM);
321 return -EINVAL;
322 }
323
324 /*
325 * create "txn" to accommodate ports enablement of
326 * different slave devices calling swr_connect_port at the
327 * same time. Once master process the txn data, it calls
328 * swr_port_response() to free the transaction. Maximum
329 * of 256 transactions can be allocated.
330 */
331 txn = kzalloc(sizeof(struct swr_params), GFP_KERNEL);
332 if (!txn)
333 return -ENOMEM;
334
335 mutex_lock(&master->mlock);
336 for (i = 0; i < master->last_tid; i++) {
337 if (master->port_txn[i] == NULL)
338 break;
339 }
340 if (i >= master->last_tid) {
341 if (master->last_tid == 255) {
342 mutex_unlock(&master->mlock);
343 kfree(txn);
344 dev_err(&master->dev, "%s Max tid reached\n",
345 __func__);
346 return -ENOMEM;
347 }
348 temp_txn = krealloc(master->port_txn,
349 (i + 1) * sizeof(struct swr_params *),
350 GFP_KERNEL);
351 if (!temp_txn) {
352 mutex_unlock(&master->mlock);
353 kfree(txn);
354 dev_err(&master->dev, "%s Not able to allocate\n"
355 "master port transaction memory\n",
356 __func__);
357 return -ENOMEM;
358 }
359 master->port_txn = temp_txn;
360 master->last_tid++;
361 }
362 master->port_txn[i] = txn;
363 mutex_unlock(&master->mlock);
364 txn->tid = i;
365
366 txn->dev_id = dev->dev_num;
367 txn->num_port = num_port;
368 for (i = 0; i < num_port; i++) {
369 txn->port_id[i] = port_id[i];
370 txn->num_ch[i] = num_ch[i];
371 txn->ch_rate[i] = ch_rate[i];
372 txn->ch_en[i] = ch_mask[i];
373 }
374 ret = master->connect_port(master, txn);
375 return ret;
376}
377EXPORT_SYMBOL(swr_connect_port);
378
379/**
380 * swr_disconnect_port - disable soundwire slave port(s)
381 * @dev: pointer to soundwire slave device
382 * @port_id: logical port id(s) of soundwire slave device
383 * @num_port: number of slave device ports need to be disabled
384 *
385 * soundwire slave device call swr_disconnect_port API to disable all/some of
386 * its ports. This API will call master disconnect_port callback function to
387 * disable master and slave port and (re)configure frame structure
388 */
389int swr_disconnect_port(struct swr_device *dev, u8 *port_id, u8 num_port)
390{
391 u8 i = 0;
392 int ret;
393 struct swr_params *txn = NULL;
394 struct swr_params **temp_txn = NULL;
395 struct swr_master *master = dev->master;
396
397 if (!master) {
398 pr_err("%s: Master is NULL\n", __func__);
399 return -EINVAL;
400 }
401
402 if (num_port > SWR_MAX_DEV_PORT_NUM) {
403 dev_err(&master->dev, "%s: num_port %d exceeds max port %d\n",
404 __func__, num_port, SWR_MAX_DEV_PORT_NUM);
405 return -EINVAL;
406 }
407
408 txn = kzalloc(sizeof(struct swr_params), GFP_KERNEL);
409 if (!txn)
410 return -ENOMEM;
411
412 mutex_lock(&master->mlock);
413 for (i = 0; i < master->last_tid; i++) {
414 if (master->port_txn[i] == NULL)
415 break;
416 }
417 if (i >= master->last_tid) {
418 if (master->last_tid == 255) {
419 mutex_unlock(&master->mlock);
420 kfree(txn);
421 dev_err(&master->dev, "%s Max tid reached\n",
422 __func__);
423 return -ENOMEM;
424 }
425 temp_txn = krealloc(master->port_txn,
426 (i + 1) * sizeof(struct swr_params *),
427 GFP_KERNEL);
428 if (!temp_txn) {
429 mutex_unlock(&master->mlock);
430 kfree(txn);
431 dev_err(&master->dev, "%s Not able to allocate\n"
432 "master port transaction memory\n",
433 __func__);
434 return -ENOMEM;
435 }
436 master->port_txn = temp_txn;
437 master->last_tid++;
438 }
439 master->port_txn[i] = txn;
440 mutex_unlock(&master->mlock);
441 txn->tid = i;
442
443 txn->dev_id = dev->dev_num;
444 txn->num_port = num_port;
445 for (i = 0; i < num_port; i++)
446 txn->port_id[i] = port_id[i];
447 ret = master->disconnect_port(master, txn);
448 return ret;
449}
450EXPORT_SYMBOL(swr_disconnect_port);
451
452/**
453 * swr_get_logical_dev_num - Get soundwire slave logical device number
454 * @dev: pointer to soundwire slave device
455 * @dev_id: physical device id of soundwire slave device
456 * @dev_num: pointer to logical device num of soundwire slave device
457 *
458 * This API will get the logical device number of soundwire slave device
459 */
460int swr_get_logical_dev_num(struct swr_device *dev, u64 dev_id,
461 u8 *dev_num)
462{
463 int ret = 0;
464 struct swr_master *master = dev->master;
465
466 if (!master) {
467 pr_err("%s: Master is NULL\n", __func__);
468 return -EINVAL;
469 }
470 mutex_lock(&master->mlock);
471 ret = master->get_logical_dev_num(master, dev_id, dev_num);
472 if (ret) {
473 pr_err("%s: Error %d to get logical addr for device %llx\n",
474 __func__, ret, dev_id);
475 }
476 mutex_unlock(&master->mlock);
477 return ret;
478}
479EXPORT_SYMBOL(swr_get_logical_dev_num);
480
481/**
482 * swr_read - read soundwire slave device registers
483 * @dev: pointer to soundwire slave device
484 * @dev_num: logical device num of soundwire slave device
485 * @reg_addr: base register address that needs to be read
486 * @buf: pointer to store the values of registers from base address
487 * @len: length of the buffer
488 *
489 * This API will read the value of the register address from
490 * soundwire slave device
491 */
492int swr_read(struct swr_device *dev, u8 dev_num, u16 reg_addr,
493 void *buf, u32 len)
494{
495 struct swr_master *master = dev->master;
496
497 if (!master)
498 return -EINVAL;
499 return master->read(master, dev_num, reg_addr, buf, len);
500}
501EXPORT_SYMBOL(swr_read);
502
503/**
504 * swr_bulk_write - write soundwire slave device registers
505 * @dev: pointer to soundwire slave device
506 * @dev_num: logical device num of soundwire slave device
507 * @reg_addr: register address of soundwire slave device
508 * @buf: contains value of register address
509 * @len: indicates number of registers
510 *
511 * This API will write the value of the register address to
512 * soundwire slave device
513 */
514int swr_bulk_write(struct swr_device *dev, u8 dev_num, void *reg,
515 const void *buf, size_t len)
516{
517 struct swr_master *master;
518
519 if (!dev || !dev->master)
520 return -EINVAL;
521
522 master = dev->master;
523 if (dev->group_id) {
524 if (master->gr_sid != dev_num) {
525 if (!master->gr_sid)
526 master->gr_sid = dev_num;
527 else
528 return 0;
529 }
530 dev_num = dev->group_id;
531 }
532 if (master->bulk_write)
533 return master->bulk_write(master, dev_num, reg, buf, len);
534
535 return -EOPNOTSUPP;
536}
537EXPORT_SYMBOL(swr_bulk_write);
538
539/**
540 * swr_write - write soundwire slave device registers
541 * @dev: pointer to soundwire slave device
542 * @dev_num: logical device num of soundwire slave device
543 * @reg_addr: register address of soundwire slave device
544 * @buf: contains value of register address
545 *
546 * This API will write the value of the register address to
547 * soundwire slave device
548 */
549int swr_write(struct swr_device *dev, u8 dev_num, u16 reg_addr,
550 const void *buf)
551{
552 struct swr_master *master = dev->master;
553
554 if (!master)
555 return -EINVAL;
556
557 if (dev->group_id) {
558 if (master->gr_sid != dev_num) {
559 if (!master->gr_sid)
560 master->gr_sid = dev_num;
561 else
562 return 0;
563 }
564 dev_num = dev->group_id;
565 }
566 return master->write(master, dev_num, reg_addr, buf);
567}
568EXPORT_SYMBOL(swr_write);
569
570/**
571 * swr_device_up - Function to bringup the soundwire slave device
572 * @swr_dev: pointer to soundwire slave device
573 * Context: can sleep
574 *
575 * This API will be called by soundwire master to bringup the slave
576 * device.
577 */
578int swr_device_up(struct swr_device *swr_dev)
579{
580 struct device *dev;
581 const struct swr_driver *sdrv;
582
583 if (!swr_dev)
584 return -EINVAL;
585
586 dev = &swr_dev->dev;
587 sdrv = to_swr_driver(dev->driver);
588 if (!sdrv)
Karthikeyan Manid52d5792017-04-04 14:09:09 -0700589 return 0;
Banajit Goswamide8271c2017-01-18 00:28:59 -0800590
591 if (sdrv->device_up)
592 return sdrv->device_up(to_swr_device(dev));
593
594 return -ENODEV;
595}
596EXPORT_SYMBOL(swr_device_up);
597
598/**
599 * swr_device_down - Function to call soundwire slave device down
600 * @swr_dev: pointer to soundwire slave device
601 * Context: can sleep
602 *
603 * This API will be called by soundwire master to put slave device in
604 * shutdown state.
605 */
606int swr_device_down(struct swr_device *swr_dev)
607{
608 struct device *dev;
609 const struct swr_driver *sdrv;
610
611 if (!swr_dev)
612 return -EINVAL;
613
614 dev = &swr_dev->dev;
615 sdrv = to_swr_driver(dev->driver);
616 if (!sdrv)
Karthikeyan Manid52d5792017-04-04 14:09:09 -0700617 return 0;
Banajit Goswamide8271c2017-01-18 00:28:59 -0800618
619 if (sdrv->device_down)
620 return sdrv->device_down(to_swr_device(dev));
621
622 return -ENODEV;
623}
624EXPORT_SYMBOL(swr_device_down);
625
626/**
627 * swr_reset_device - reset soundwire slave device
628 * @swr_dev: pointer to soundwire slave device
629 * Context: can sleep
630 *
631 * This API will be called by soundwire master to reset the slave
632 * device when the slave device is not responding or in undefined
633 * state
634 */
635int swr_reset_device(struct swr_device *swr_dev)
636{
637 struct device *dev;
638 const struct swr_driver *sdrv;
639
640 if (!swr_dev)
641 return -EINVAL;
642
643 dev = &swr_dev->dev;
644 sdrv = to_swr_driver(dev->driver);
645 if (!sdrv)
646 return -EINVAL;
647
648 if (sdrv->reset_device)
649 return sdrv->reset_device(to_swr_device(dev));
650
651 return -ENODEV;
652}
653EXPORT_SYMBOL(swr_reset_device);
654
655/**
656 * swr_set_device_group - Assign group id to the slave devices
657 * @swr_dev: pointer to soundwire slave device
658 * @id: group id to be assigned to slave device
659 * Context: can sleep
660 *
661 * This API will be called either from soundwire master or slave
662 * device to assign group id.
663 */
664int swr_set_device_group(struct swr_device *swr_dev, u8 id)
665{
666 struct swr_master *master;
667
668 if (!swr_dev)
669 return -EINVAL;
670
671 swr_dev->group_id = id;
672 master = swr_dev->master;
673 if (!id && master)
674 master->gr_sid = 0;
675
676 return 0;
677}
678EXPORT_SYMBOL(swr_set_device_group);
679
680static int swr_drv_probe(struct device *dev)
681{
682 const struct swr_driver *sdrv = to_swr_driver(dev->driver);
683
684 if (!sdrv)
685 return -EINVAL;
686
687 if (sdrv->probe)
688 return sdrv->probe(to_swr_device(dev));
689 return -ENODEV;
690}
691
692static int swr_drv_remove(struct device *dev)
693{
694 const struct swr_driver *sdrv = to_swr_driver(dev->driver);
695
696 if (!sdrv)
697 return -EINVAL;
698
699 if (sdrv->remove)
700 return sdrv->remove(to_swr_device(dev));
701 return -ENODEV;
702}
703
704static void swr_drv_shutdown(struct device *dev)
705{
706 const struct swr_driver *sdrv = to_swr_driver(dev->driver);
707
708 if (!sdrv)
709 return;
710
711 if (sdrv->shutdown)
712 sdrv->shutdown(to_swr_device(dev));
713}
714
715/**
716 * swr_driver_register - register a soundwire driver
717 * @drv: the driver to register
718 * Context: can sleep
719 */
720int swr_driver_register(struct swr_driver *drv)
721{
722 drv->driver.bus = &soundwire_type;
723 if (drv->probe)
724 drv->driver.probe = swr_drv_probe;
725 if (drv->remove)
726 drv->driver.remove = swr_drv_remove;
727
728 if (drv->shutdown)
729 drv->driver.shutdown = swr_drv_shutdown;
730
731 return driver_register(&drv->driver);
732}
733EXPORT_SYMBOL(swr_driver_register);
734
735/**
736 * swr_driver_unregister - unregister a soundwire driver
737 * @drv: the driver to unregister
738 */
739void swr_driver_unregister(struct swr_driver *drv)
740{
741 if (drv)
742 driver_unregister(&drv->driver);
743}
744EXPORT_SYMBOL(swr_driver_unregister);
745
746static void swr_match_ctrl_to_boardinfo(struct swr_master *master,
747 struct swr_boardinfo *bi)
748{
749 struct swr_device *swr;
750
751 if (master->bus_num != bi->bus_num) {
752 dev_dbg(&master->dev,
753 "%s: master# %d and bi# %d does not match\n",
754 __func__, master->bus_num, bi->bus_num);
755 return;
756 }
757
758 swr = swr_new_device(master, bi);
759 if (!swr)
760 dev_err(&master->dev, "can't create new device for %s\n",
761 bi->swr_slave->name);
762}
763
764/**
765 * swr_master_add_boarddevices - Add devices registered by board info
766 * @master: master to which these devices are to be added to.
767 *
768 * This API is called by master when it is up and running. If devices
769 * on a master were registered before master, this will make sure that
770 * they get probed when master is up.
771 */
772void swr_master_add_boarddevices(struct swr_master *master)
773{
774 struct boardinfo *bi;
775
776 mutex_lock(&board_lock);
777 list_add_tail(&master->list, &swr_master_list);
778 list_for_each_entry(bi, &board_list, list)
779 swr_match_ctrl_to_boardinfo(master, &bi->board_info);
780 mutex_unlock(&board_lock);
781}
782EXPORT_SYMBOL(swr_master_add_boarddevices);
783
784static void swr_unregister_device(struct swr_device *swr)
785{
786 if (swr)
787 device_unregister(&swr->dev);
788}
789
790static void swr_master_release(struct device *dev)
791{
792 struct swr_master *master = to_swr_master(dev);
793
794 kfree(master);
795}
796
797#define swr_master_attr_gr NULL
798static struct device_type swr_master_type = {
799 .groups = swr_master_attr_gr,
800 .release = swr_master_release,
801};
802
803static int __unregister(struct device *dev, void *null)
804{
805 swr_unregister_device(to_swr_device(dev));
806 return 0;
807}
808
809/**
810 * swr_unregister_master - unregister soundwire master controller
811 * @master: the master being unregistered
812 *
813 * This API is called by master controller driver to unregister
814 * master controller that was registered by swr_register_master API.
815 */
816void swr_unregister_master(struct swr_master *master)
817{
818 int dummy;
819 struct swr_master *m_ctrl;
820
821 mutex_lock(&swr_lock);
822 m_ctrl = idr_find(&master_idr, master->bus_num);
823 mutex_unlock(&swr_lock);
824 if (m_ctrl != master)
825 return;
826
827 mutex_lock(&board_lock);
828 list_del(&master->list);
829 mutex_unlock(&board_lock);
830
831 /* free bus id */
832 mutex_lock(&swr_lock);
833 idr_remove(&master_idr, master->bus_num);
834 mutex_unlock(&swr_lock);
835
836 dummy = device_for_each_child(&master->dev, NULL, __unregister);
837 device_unregister(&master->dev);
838}
839EXPORT_SYMBOL(swr_unregister_master);
840
841/**
842 * swr_register_master - register soundwire master controller
843 * @master: master to be registered
844 *
845 * This API will register master with the framework. master->bus_num
846 * is the desired number with which soundwire framework registers the
847 * master.
848 */
849int swr_register_master(struct swr_master *master)
850{
851 int id;
852 int status = 0;
853
854 mutex_lock(&swr_lock);
855 id = idr_alloc(&master_idr, master, master->bus_num,
856 master->bus_num+1, GFP_KERNEL);
857 mutex_unlock(&swr_lock);
858 if (id < 0)
859 return id;
860 master->bus_num = id;
861
862 /* Can't register until driver model init */
863 if (WARN_ON(!soundwire_type.p)) {
864 status = -EAGAIN;
865 goto done;
866 }
867
868 dev_set_name(&master->dev, "swr%u", master->bus_num);
869 master->dev.bus = &soundwire_type;
870 master->dev.type = &swr_master_type;
871 mutex_init(&master->mlock);
872 status = device_register(&master->dev);
873 if (status < 0)
874 goto done;
875
876 INIT_LIST_HEAD(&master->devices);
877 pr_debug("%s: SWR master registered successfully %s\n",
878 __func__, dev_name(&master->dev));
879 return 0;
880
881done:
882 idr_remove(&master_idr, master->bus_num);
883 return status;
884}
885EXPORT_SYMBOL(swr_register_master);
886
887#define swr_device_attr_gr NULL
888#define swr_device_uevent NULL
889static struct device_type swr_dev_type = {
890 .groups = swr_device_attr_gr,
891 .uevent = swr_device_uevent,
892 .release = swr_dev_release,
893};
894
895static const struct swr_device_id *swr_match(const struct swr_device_id *id,
896 const struct swr_device *swr_dev)
897{
898 while (id->name[0]) {
899 if (strcmp(swr_dev->name, id->name) == 0)
900 return id;
901 id++;
902 }
903 return NULL;
904}
905
906static int swr_device_match(struct device *dev, struct device_driver *driver)
907{
908 struct swr_device *swr_dev;
909 struct swr_driver *drv = to_swr_driver(driver);
910
911 if (!drv)
912 return -EINVAL;
913
914 if (dev->type == &swr_dev_type)
915 swr_dev = to_swr_device(dev);
916 else
917 return 0;
918 if (drv->id_table)
919 return swr_match(drv->id_table, swr_dev) != NULL;
920
921 if (driver->name)
922 return strcmp(swr_dev->name, driver->name) == 0;
923 return 0;
924}
925#ifdef CONFIG_PM_SLEEP
926static int swr_legacy_suspend(struct device *dev, pm_message_t mesg)
927{
928 struct swr_device *swr_dev = NULL;
929 struct swr_driver *driver;
930
931 if (dev->type == &swr_dev_type)
932 swr_dev = to_swr_device(dev);
933
934 if (!swr_dev || !dev->driver)
935 return 0;
936
937 driver = to_swr_driver(dev->driver);
938 if (!driver->suspend)
939 return 0;
940
941 return driver->suspend(swr_dev, mesg);
942}
943
944static int swr_legacy_resume(struct device *dev)
945{
946 struct swr_device *swr_dev = NULL;
947 struct swr_driver *driver;
948
949 if (dev->type == &swr_dev_type)
950 swr_dev = to_swr_device(dev);
951
952 if (!swr_dev || !dev->driver)
953 return 0;
954
955 driver = to_swr_driver(dev->driver);
956 if (!driver->resume)
957 return 0;
958
959 return driver->resume(swr_dev);
960}
961
962static int swr_pm_suspend(struct device *dev)
963{
964 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
965
966 if (pm)
967 return pm_generic_suspend(dev);
968 else
969 return swr_legacy_suspend(dev, PMSG_SUSPEND);
970}
971
972static int swr_pm_resume(struct device *dev)
973{
974 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
975
976 if (pm)
977 return pm_generic_resume(dev);
978 else
979 return swr_legacy_resume(dev);
980}
981#else
982#define swr_pm_suspend NULL
983#define swr_pm_resume NULL
984#endif /*CONFIG_PM_SLEEP*/
985
986static const struct dev_pm_ops soundwire_pm = {
987 .suspend = swr_pm_suspend,
988 .resume = swr_pm_resume,
989 SET_RUNTIME_PM_OPS(
990 pm_generic_suspend,
991 pm_generic_resume,
992 NULL
993 )
994};
995
996struct device soundwire_dev = {
997 .init_name = "soundwire",
998};
999
1000struct bus_type soundwire_type = {
1001 .name = "soundwire",
1002 .match = swr_device_match,
1003 .pm = &soundwire_pm,
1004};
1005EXPORT_SYMBOL(soundwire_type);
1006
1007static void __exit soundwire_exit(void)
1008{
1009 device_unregister(&soundwire_dev);
1010 bus_unregister(&soundwire_type);
1011}
1012
1013static int __init soundwire_init(void)
1014{
1015 int retval;
1016
1017 retval = bus_register(&soundwire_type);
1018 if (!retval)
1019 retval = device_register(&soundwire_dev);
1020
1021 if (retval)
1022 bus_unregister(&soundwire_type);
1023
1024 return retval;
1025}
1026postcore_initcall(soundwire_init);
1027module_exit(soundwire_exit);
1028
1029
1030MODULE_LICENSE("GPL v2");
1031MODULE_DESCRIPTION("Soundwire module");
1032MODULE_ALIAS("platform:soundwire");