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