1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2016 Robert Jarzmik <robert.jarzmik@free.fr>
6 #include <linux/module.h>
7 #include <linux/bitops.h>
9 #include <linux/device.h>
10 #include <linux/idr.h>
11 #include <linux/list.h>
12 #include <linux/mutex.h>
15 #include <linux/pm_runtime.h>
16 #include <linux/slab.h>
17 #include <linux/sysfs.h>
18 #include <sound/ac97_codec.h>
19 #include <sound/ac97/codec.h>
20 #include <sound/ac97/controller.h>
21 #include <sound/ac97/regs.h>
23 #include "ac97_core.h"
26 * Protects ac97_controllers and each ac97_controller structure.
28 static DEFINE_MUTEX(ac97_controllers_mutex
);
29 static DEFINE_IDR(ac97_adapter_idr
);
30 static LIST_HEAD(ac97_controllers
);
32 static inline struct ac97_controller
*
33 to_ac97_controller(struct device
*ac97_adapter
)
35 return container_of(ac97_adapter
, struct ac97_controller
, adap
);
38 static int ac97_unbound_ctrl_write(struct ac97_controller
*adrv
, int slot
,
39 unsigned short reg
, unsigned short val
)
44 static int ac97_unbound_ctrl_read(struct ac97_controller
*adrv
, int slot
,
50 static const struct ac97_controller_ops ac97_unbound_ctrl_ops
= {
51 .write
= ac97_unbound_ctrl_write
,
52 .read
= ac97_unbound_ctrl_read
,
55 static struct ac97_controller ac97_unbound_ctrl
= {
56 .ops
= &ac97_unbound_ctrl_ops
,
59 static struct ac97_codec_device
*
60 ac97_codec_find(struct ac97_controller
*ac97_ctrl
, unsigned int codec_num
)
62 if (codec_num
>= AC97_BUS_MAX_CODECS
)
63 return ERR_PTR(-EINVAL
);
65 return ac97_ctrl
->codecs
[codec_num
];
68 static struct device_node
*
69 ac97_of_get_child_device(struct ac97_controller
*ac97_ctrl
, int idx
,
70 unsigned int vendor_id
)
72 struct device_node
*node
;
74 char compat
[] = "ac97,0000,0000";
76 snprintf(compat
, sizeof(compat
), "ac97,%04x,%04x",
77 vendor_id
>> 16, vendor_id
& 0xffff);
79 for_each_child_of_node(ac97_ctrl
->parent
->of_node
, node
) {
80 if ((idx
!= of_property_read_u32(node
, "reg", ®
)) ||
81 !of_device_is_compatible(node
, compat
))
89 static void ac97_codec_release(struct device
*dev
)
91 struct ac97_codec_device
*adev
;
92 struct ac97_controller
*ac97_ctrl
;
94 adev
= to_ac97_device(dev
);
95 ac97_ctrl
= adev
->ac97_ctrl
;
96 ac97_ctrl
->codecs
[adev
->num
] = NULL
;
97 of_node_put(dev
->of_node
);
101 static int ac97_codec_add(struct ac97_controller
*ac97_ctrl
, int idx
,
102 unsigned int vendor_id
)
104 struct ac97_codec_device
*codec
;
107 codec
= kzalloc(sizeof(*codec
), GFP_KERNEL
);
110 ac97_ctrl
->codecs
[idx
] = codec
;
111 codec
->vendor_id
= vendor_id
;
112 codec
->dev
.release
= ac97_codec_release
;
113 codec
->dev
.bus
= &ac97_bus_type
;
114 codec
->dev
.parent
= &ac97_ctrl
->adap
;
116 codec
->ac97_ctrl
= ac97_ctrl
;
118 device_initialize(&codec
->dev
);
119 dev_set_name(&codec
->dev
, "%s:%u", dev_name(ac97_ctrl
->parent
), idx
);
120 codec
->dev
.of_node
= ac97_of_get_child_device(ac97_ctrl
, idx
,
123 ret
= device_add(&codec
->dev
);
125 put_device(&codec
->dev
);
132 unsigned int snd_ac97_bus_scan_one(struct ac97_controller
*adrv
,
133 unsigned int codec_num
)
135 unsigned short vid1
, vid2
;
138 ret
= adrv
->ops
->read(adrv
, codec_num
, AC97_VENDOR_ID1
);
139 vid1
= (ret
& 0xffff);
143 ret
= adrv
->ops
->read(adrv
, codec_num
, AC97_VENDOR_ID2
);
144 vid2
= (ret
& 0xffff);
148 dev_dbg(&adrv
->adap
, "%s(codec_num=%u): vendor_id=0x%08x\n",
149 __func__
, codec_num
, AC97_ID(vid1
, vid2
));
150 return AC97_ID(vid1
, vid2
);
153 static int ac97_bus_scan(struct ac97_controller
*ac97_ctrl
)
156 unsigned int vendor_id
;
158 for (i
= 0; i
< AC97_BUS_MAX_CODECS
; i
++) {
159 if (ac97_codec_find(ac97_ctrl
, i
))
161 if (!(ac97_ctrl
->slots_available
& BIT(i
)))
163 vendor_id
= snd_ac97_bus_scan_one(ac97_ctrl
, i
);
167 ret
= ac97_codec_add(ac97_ctrl
, i
, vendor_id
);
174 static int ac97_bus_reset(struct ac97_controller
*ac97_ctrl
)
176 ac97_ctrl
->ops
->reset(ac97_ctrl
);
182 * snd_ac97_codec_driver_register - register an AC97 codec driver
183 * @drv: AC97 driver codec to register
185 * Register an AC97 codec driver to the ac97 bus driver, aka. the AC97 digital
188 * Returns 0 on success or error code
190 int snd_ac97_codec_driver_register(struct ac97_codec_driver
*drv
)
192 drv
->driver
.bus
= &ac97_bus_type
;
193 return driver_register(&drv
->driver
);
195 EXPORT_SYMBOL_GPL(snd_ac97_codec_driver_register
);
198 * snd_ac97_codec_driver_unregister - unregister an AC97 codec driver
199 * @drv: AC97 codec driver to unregister
201 * Unregister a previously registered ac97 codec driver.
203 void snd_ac97_codec_driver_unregister(struct ac97_codec_driver
*drv
)
205 driver_unregister(&drv
->driver
);
207 EXPORT_SYMBOL_GPL(snd_ac97_codec_driver_unregister
);
210 * snd_ac97_codec_get_platdata - get platform_data
211 * @adev: the ac97 codec device
213 * For legacy platforms, in order to have platform_data in codec drivers
214 * available, while ac97 device are auto-created upon probe, this retrieves the
215 * platdata which was setup on ac97 controller registration.
217 * Returns the platform data pointer
219 void *snd_ac97_codec_get_platdata(const struct ac97_codec_device
*adev
)
221 struct ac97_controller
*ac97_ctrl
= adev
->ac97_ctrl
;
223 return ac97_ctrl
->codecs_pdata
[adev
->num
];
225 EXPORT_SYMBOL_GPL(snd_ac97_codec_get_platdata
);
227 static void ac97_ctrl_codecs_unregister(struct ac97_controller
*ac97_ctrl
)
231 for (i
= 0; i
< AC97_BUS_MAX_CODECS
; i
++)
232 if (ac97_ctrl
->codecs
[i
]) {
233 ac97_ctrl
->codecs
[i
]->ac97_ctrl
= &ac97_unbound_ctrl
;
234 device_unregister(&ac97_ctrl
->codecs
[i
]->dev
);
238 static ssize_t
cold_reset_store(struct device
*dev
,
239 struct device_attribute
*attr
, const char *buf
,
242 struct ac97_controller
*ac97_ctrl
;
244 mutex_lock(&ac97_controllers_mutex
);
245 ac97_ctrl
= to_ac97_controller(dev
);
246 ac97_ctrl
->ops
->reset(ac97_ctrl
);
247 mutex_unlock(&ac97_controllers_mutex
);
250 static DEVICE_ATTR_WO(cold_reset
);
252 static ssize_t
warm_reset_store(struct device
*dev
,
253 struct device_attribute
*attr
, const char *buf
,
256 struct ac97_controller
*ac97_ctrl
;
261 mutex_lock(&ac97_controllers_mutex
);
262 ac97_ctrl
= to_ac97_controller(dev
);
263 ac97_ctrl
->ops
->warm_reset(ac97_ctrl
);
264 mutex_unlock(&ac97_controllers_mutex
);
267 static DEVICE_ATTR_WO(warm_reset
);
269 static struct attribute
*ac97_controller_device_attrs
[] = {
270 &dev_attr_cold_reset
.attr
,
271 &dev_attr_warm_reset
.attr
,
275 static const struct attribute_group ac97_adapter_attr_group
= {
276 .name
= "ac97_operations",
277 .attrs
= ac97_controller_device_attrs
,
280 static const struct attribute_group
*ac97_adapter_groups
[] = {
281 &ac97_adapter_attr_group
,
285 static void ac97_del_adapter(struct ac97_controller
*ac97_ctrl
)
287 mutex_lock(&ac97_controllers_mutex
);
288 ac97_ctrl_codecs_unregister(ac97_ctrl
);
289 list_del(&ac97_ctrl
->controllers
);
290 mutex_unlock(&ac97_controllers_mutex
);
292 device_unregister(&ac97_ctrl
->adap
);
295 static void ac97_adapter_release(struct device
*dev
)
297 struct ac97_controller
*ac97_ctrl
;
299 ac97_ctrl
= to_ac97_controller(dev
);
300 idr_remove(&ac97_adapter_idr
, ac97_ctrl
->nr
);
301 dev_dbg(&ac97_ctrl
->adap
, "adapter unregistered by %s\n",
302 dev_name(ac97_ctrl
->parent
));
305 static const struct device_type ac97_adapter_type
= {
306 .groups
= ac97_adapter_groups
,
307 .release
= ac97_adapter_release
,
310 static int ac97_add_adapter(struct ac97_controller
*ac97_ctrl
)
314 mutex_lock(&ac97_controllers_mutex
);
315 ret
= idr_alloc(&ac97_adapter_idr
, ac97_ctrl
, 0, 0, GFP_KERNEL
);
318 dev_set_name(&ac97_ctrl
->adap
, "ac97-%d", ret
);
319 ac97_ctrl
->adap
.type
= &ac97_adapter_type
;
320 ac97_ctrl
->adap
.parent
= ac97_ctrl
->parent
;
321 ret
= device_register(&ac97_ctrl
->adap
);
323 put_device(&ac97_ctrl
->adap
);
326 list_add(&ac97_ctrl
->controllers
, &ac97_controllers
);
327 mutex_unlock(&ac97_controllers_mutex
);
330 dev_dbg(&ac97_ctrl
->adap
, "adapter registered by %s\n",
331 dev_name(ac97_ctrl
->parent
));
336 * snd_ac97_controller_register - register an ac97 controller
337 * @ops: the ac97 bus operations
338 * @dev: the device providing the ac97 DC function
339 * @slots_available: mask of the ac97 codecs that can be scanned and probed
340 * bit0 => codec 0, bit1 => codec 1 ... bit 3 => codec 3
341 * @codecs_pdata: codec platform data
343 * Register a digital controller which can control up to 4 ac97 codecs. This is
344 * the controller side of the AC97 AC-link, while the slave side are the codecs.
346 * Returns a valid controller upon success, negative pointer value upon error
348 struct ac97_controller
*snd_ac97_controller_register(
349 const struct ac97_controller_ops
*ops
, struct device
*dev
,
350 unsigned short slots_available
, void **codecs_pdata
)
352 struct ac97_controller
*ac97_ctrl
;
355 ac97_ctrl
= kzalloc(sizeof(*ac97_ctrl
), GFP_KERNEL
);
357 return ERR_PTR(-ENOMEM
);
359 for (i
= 0; i
< AC97_BUS_MAX_CODECS
&& codecs_pdata
; i
++)
360 ac97_ctrl
->codecs_pdata
[i
] = codecs_pdata
[i
];
362 ac97_ctrl
->ops
= ops
;
363 ac97_ctrl
->slots_available
= slots_available
;
364 ac97_ctrl
->parent
= dev
;
365 ret
= ac97_add_adapter(ac97_ctrl
);
369 ac97_bus_reset(ac97_ctrl
);
370 ac97_bus_scan(ac97_ctrl
);
377 EXPORT_SYMBOL_GPL(snd_ac97_controller_register
);
380 * snd_ac97_controller_unregister - unregister an ac97 controller
381 * @ac97_ctrl: the device previously provided to ac97_controller_register()
384 void snd_ac97_controller_unregister(struct ac97_controller
*ac97_ctrl
)
386 ac97_del_adapter(ac97_ctrl
);
388 EXPORT_SYMBOL_GPL(snd_ac97_controller_unregister
);
391 static int ac97_pm_runtime_suspend(struct device
*dev
)
393 struct ac97_codec_device
*codec
= to_ac97_device(dev
);
394 int ret
= pm_generic_runtime_suspend(dev
);
396 if (ret
== 0 && dev
->driver
) {
397 if (pm_runtime_is_irq_safe(dev
))
398 clk_disable(codec
->clk
);
400 clk_disable_unprepare(codec
->clk
);
406 static int ac97_pm_runtime_resume(struct device
*dev
)
408 struct ac97_codec_device
*codec
= to_ac97_device(dev
);
412 if (pm_runtime_is_irq_safe(dev
))
413 ret
= clk_enable(codec
->clk
);
415 ret
= clk_prepare_enable(codec
->clk
);
420 return pm_generic_runtime_resume(dev
);
422 #endif /* CONFIG_PM */
424 static const struct dev_pm_ops ac97_pm
= {
425 .suspend
= pm_generic_suspend
,
426 .resume
= pm_generic_resume
,
427 .freeze
= pm_generic_freeze
,
428 .thaw
= pm_generic_thaw
,
429 .poweroff
= pm_generic_poweroff
,
430 .restore
= pm_generic_restore
,
432 ac97_pm_runtime_suspend
,
433 ac97_pm_runtime_resume
,
437 static int ac97_get_enable_clk(struct ac97_codec_device
*adev
)
441 adev
->clk
= clk_get(&adev
->dev
, "ac97_clk");
442 if (IS_ERR(adev
->clk
))
443 return PTR_ERR(adev
->clk
);
445 ret
= clk_prepare_enable(adev
->clk
);
452 static void ac97_put_disable_clk(struct ac97_codec_device
*adev
)
454 clk_disable_unprepare(adev
->clk
);
458 static ssize_t
vendor_id_show(struct device
*dev
,
459 struct device_attribute
*attr
, char *buf
)
461 struct ac97_codec_device
*codec
= to_ac97_device(dev
);
463 return sysfs_emit(buf
, "%08x", codec
->vendor_id
);
465 static DEVICE_ATTR_RO(vendor_id
);
467 static struct attribute
*ac97_dev_attrs
[] = {
468 &dev_attr_vendor_id
.attr
,
471 ATTRIBUTE_GROUPS(ac97_dev
);
473 static int ac97_bus_match(struct device
*dev
, const struct device_driver
*drv
)
475 struct ac97_codec_device
*adev
= to_ac97_device(dev
);
476 const struct ac97_codec_driver
*adrv
= to_ac97_driver(drv
);
477 const struct ac97_id
*id
= adrv
->id_table
;
480 if (adev
->vendor_id
== 0x0 || adev
->vendor_id
== 0xffffffff)
484 if (ac97_ids_match(id
[i
].id
, adev
->vendor_id
, id
[i
].mask
))
486 } while (id
[i
++].id
);
491 static int ac97_bus_probe(struct device
*dev
)
493 struct ac97_codec_device
*adev
= to_ac97_device(dev
);
494 struct ac97_codec_driver
*adrv
= to_ac97_driver(dev
->driver
);
497 ret
= ac97_get_enable_clk(adev
);
501 pm_runtime_get_noresume(dev
);
502 pm_runtime_set_active(dev
);
503 pm_runtime_enable(dev
);
505 ret
= adrv
->probe(adev
);
509 pm_runtime_disable(dev
);
510 pm_runtime_set_suspended(dev
);
511 pm_runtime_put_noidle(dev
);
512 ac97_put_disable_clk(adev
);
517 static void ac97_bus_remove(struct device
*dev
)
519 struct ac97_codec_device
*adev
= to_ac97_device(dev
);
520 struct ac97_codec_driver
*adrv
= to_ac97_driver(dev
->driver
);
523 ret
= pm_runtime_resume_and_get(dev
);
528 pm_runtime_put_noidle(dev
);
529 ac97_put_disable_clk(adev
);
531 pm_runtime_disable(dev
);
534 const struct bus_type ac97_bus_type
= {
536 .dev_groups
= ac97_dev_groups
,
537 .match
= ac97_bus_match
,
539 .probe
= ac97_bus_probe
,
540 .remove
= ac97_bus_remove
,
543 static int __init
ac97_bus_init(void)
545 return bus_register(&ac97_bus_type
);
547 subsys_initcall(ac97_bus_init
);
549 static void __exit
ac97_bus_exit(void)
551 bus_unregister(&ac97_bus_type
);
553 module_exit(ac97_bus_exit
);
555 MODULE_DESCRIPTION("AC97 bus interface");
556 MODULE_LICENSE("GPL");
557 MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");