forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/sound/hda/ext/hdac_ext_bus.c
....@@ -1,18 +1,10 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * hdac-ext-bus.c - HD-audio extended core bus functions.
34 *
45 * Copyright (C) 2014-2015 Intel Corp
56 * Author: Jeeja KP <jeeja.kp@intel.com>
67 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; version 2 of the License.
11
- *
12
- * This program is distributed in the hope that it will be useful, but
13
- * WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
- * General Public License for more details.
168 *
179 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1810 */
....@@ -25,89 +17,32 @@
2517 MODULE_DESCRIPTION("HDA extended core");
2618 MODULE_LICENSE("GPL v2");
2719
28
-static void hdac_ext_writel(u32 value, u32 __iomem *addr)
29
-{
30
- writel(value, addr);
31
-}
32
-
33
-static u32 hdac_ext_readl(u32 __iomem *addr)
34
-{
35
- return readl(addr);
36
-}
37
-
38
-static void hdac_ext_writew(u16 value, u16 __iomem *addr)
39
-{
40
- writew(value, addr);
41
-}
42
-
43
-static u16 hdac_ext_readw(u16 __iomem *addr)
44
-{
45
- return readw(addr);
46
-}
47
-
48
-static void hdac_ext_writeb(u8 value, u8 __iomem *addr)
49
-{
50
- writeb(value, addr);
51
-}
52
-
53
-static u8 hdac_ext_readb(u8 __iomem *addr)
54
-{
55
- return readb(addr);
56
-}
57
-
58
-static int hdac_ext_dma_alloc_pages(struct hdac_bus *bus, int type,
59
- size_t size, struct snd_dma_buffer *buf)
60
-{
61
- return snd_dma_alloc_pages(type, bus->dev, size, buf);
62
-}
63
-
64
-static void hdac_ext_dma_free_pages(struct hdac_bus *bus, struct snd_dma_buffer *buf)
65
-{
66
- snd_dma_free_pages(buf);
67
-}
68
-
69
-static const struct hdac_io_ops hdac_ext_default_io = {
70
- .reg_writel = hdac_ext_writel,
71
- .reg_readl = hdac_ext_readl,
72
- .reg_writew = hdac_ext_writew,
73
- .reg_readw = hdac_ext_readw,
74
- .reg_writeb = hdac_ext_writeb,
75
- .reg_readb = hdac_ext_readb,
76
- .dma_alloc_pages = hdac_ext_dma_alloc_pages,
77
- .dma_free_pages = hdac_ext_dma_free_pages,
78
-};
79
-
8020 /**
8121 * snd_hdac_ext_bus_init - initialize a HD-audio extended bus
82
- * @ebus: the pointer to extended bus object
22
+ * @bus: the pointer to HDAC bus object
8323 * @dev: device pointer
8424 * @ops: bus verb operators
85
- * @io_ops: lowlevel I/O operators, can be NULL. If NULL core will use
86
- * default ops
25
+ * @ext_ops: operators used for ASoC HDA codec drivers
8726 *
8827 * Returns 0 if successful, or a negative error code.
8928 */
9029 int snd_hdac_ext_bus_init(struct hdac_bus *bus, struct device *dev,
9130 const struct hdac_bus_ops *ops,
92
- const struct hdac_io_ops *io_ops,
9331 const struct hdac_ext_bus_ops *ext_ops)
9432 {
9533 int ret;
96
- static int idx;
9734
98
- /* check if io ops are provided, if not load the defaults */
99
- if (io_ops == NULL)
100
- io_ops = &hdac_ext_default_io;
101
-
102
- ret = snd_hdac_bus_init(bus, dev, ops, io_ops);
35
+ ret = snd_hdac_bus_init(bus, dev, ops);
10336 if (ret < 0)
10437 return ret;
10538
10639 bus->ext_ops = ext_ops;
107
- INIT_LIST_HEAD(&bus->hlink_list);
108
- bus->idx = idx++;
109
-
110
- mutex_init(&bus->lock);
40
+ /* FIXME:
41
+ * Currently only one bus is supported, if there is device with more
42
+ * buses, bus->idx should be greater than 0, but there needs to be a
43
+ * reliable way to always assign same number.
44
+ */
45
+ bus->idx = 0;
11146 bus->cmd_dma_state = true;
11247
11348 return 0;
....@@ -116,7 +51,7 @@
11651
11752 /**
11853 * snd_hdac_ext_bus_exit - clean up a HD-audio extended bus
119
- * @ebus: the pointer to extended bus object
54
+ * @bus: the pointer to HDAC bus object
12055 */
12156 void snd_hdac_ext_bus_exit(struct hdac_bus *bus)
12257 {
....@@ -127,18 +62,20 @@
12762
12863 static void default_release(struct device *dev)
12964 {
130
- snd_hdac_ext_bus_device_exit(container_of(dev, struct hdac_device, dev));
65
+ snd_hdac_ext_bus_device_exit(dev_to_hdac_dev(dev));
13166 }
13267
13368 /**
13469 * snd_hdac_ext_bus_device_init - initialize the HDA extended codec base device
135
- * @ebus: hdac extended bus to attach to
70
+ * @bus: hdac bus to attach to
13671 * @addr: codec address
72
+ * @hdev: hdac device to init
73
+ * @type: codec type (HDAC_DEV_*) to use for this device
13774 *
13875 * Returns zero for success or a negative error code.
13976 */
14077 int snd_hdac_ext_bus_device_init(struct hdac_bus *bus, int addr,
141
- struct hdac_device *hdev)
78
+ struct hdac_device *hdev, int type)
14279 {
14380 char name[15];
14481 int ret;
....@@ -152,7 +89,7 @@
15289 dev_err(bus->dev, "device init failed for hdac device\n");
15390 return ret;
15491 }
155
- hdev->type = HDA_DEV_ASOC;
92
+ hdev->type = type;
15693 hdev->dev.release = default_release;
15794
15895 ret = snd_hdac_device_register(hdev);
....@@ -179,7 +116,7 @@
179116 /**
180117 * snd_hdac_ext_bus_device_remove - remove HD-audio extended codec base devices
181118 *
182
- * @ebus: HD-audio extended bus
119
+ * @bus: the pointer to HDAC bus object
183120 */
184121 void snd_hdac_ext_bus_device_remove(struct hdac_bus *bus)
185122 {