diff options
| author | Rakesh Ughreja <rakesh.a.ughreja@intel.com> | 2018-06-01 23:53:50 -0400 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2018-06-28 01:33:29 -0400 |
| commit | 76f56fae1cf9040325a58d1375291baf71dfaf03 (patch) | |
| tree | ecc691b24f517dbaf6729b3a0e4d80f3f16a669b /sound/hda/ext | |
| parent | 3787a39852b0d6a9e67336f8fb5815c13ab78bb6 (diff) | |
ALSA: hdac: Remove usage of struct hdac_ext_bus and use hdac_bus instead
This patch removes the hdac_ext_bus structure. The legacy and
enhanced HDaudio capabilities can be handled in a backward-compatible
way without separate definitions.
Follow-up patches in this series handle the driver definition.
Signed-off-by: Rakesh Ughreja <rakesh.a.ughreja@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/hda/ext')
| -rw-r--r-- | sound/hda/ext/hdac_ext_bus.c | 27 | ||||
| -rw-r--r-- | sound/hda/ext/hdac_ext_controller.c | 55 | ||||
| -rw-r--r-- | sound/hda/ext/hdac_ext_stream.c | 104 |
3 files changed, 84 insertions, 102 deletions
diff --git a/sound/hda/ext/hdac_ext_bus.c b/sound/hda/ext/hdac_ext_bus.c index 0e4823fdd411..77547ede9ae8 100644 --- a/sound/hda/ext/hdac_ext_bus.c +++ b/sound/hda/ext/hdac_ext_bus.c | |||
| @@ -87,7 +87,7 @@ static const struct hdac_io_ops hdac_ext_default_io = { | |||
| 87 | * | 87 | * |
| 88 | * Returns 0 if successful, or a negative error code. | 88 | * Returns 0 if successful, or a negative error code. |
| 89 | */ | 89 | */ |
| 90 | int snd_hdac_ext_bus_init(struct hdac_ext_bus *ebus, struct device *dev, | 90 | int snd_hdac_ext_bus_init(struct hdac_bus *bus, struct device *dev, |
| 91 | const struct hdac_bus_ops *ops, | 91 | const struct hdac_bus_ops *ops, |
| 92 | const struct hdac_io_ops *io_ops) | 92 | const struct hdac_io_ops *io_ops) |
| 93 | { | 93 | { |
| @@ -98,15 +98,15 @@ int snd_hdac_ext_bus_init(struct hdac_ext_bus *ebus, struct device *dev, | |||
| 98 | if (io_ops == NULL) | 98 | if (io_ops == NULL) |
| 99 | io_ops = &hdac_ext_default_io; | 99 | io_ops = &hdac_ext_default_io; |
| 100 | 100 | ||
| 101 | ret = snd_hdac_bus_init(&ebus->bus, dev, ops, io_ops); | 101 | ret = snd_hdac_bus_init(bus, dev, ops, io_ops); |
| 102 | if (ret < 0) | 102 | if (ret < 0) |
| 103 | return ret; | 103 | return ret; |
| 104 | 104 | ||
| 105 | INIT_LIST_HEAD(&ebus->hlink_list); | 105 | INIT_LIST_HEAD(&bus->hlink_list); |
| 106 | ebus->idx = idx++; | 106 | bus->idx = idx++; |
| 107 | 107 | ||
| 108 | mutex_init(&ebus->lock); | 108 | mutex_init(&bus->lock); |
| 109 | ebus->cmd_dma_state = true; | 109 | bus->cmd_dma_state = true; |
| 110 | 110 | ||
| 111 | return 0; | 111 | return 0; |
| 112 | } | 112 | } |
| @@ -116,10 +116,10 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_init); | |||
| 116 | * snd_hdac_ext_bus_exit - clean up a HD-audio extended bus | 116 | * snd_hdac_ext_bus_exit - clean up a HD-audio extended bus |
| 117 | * @ebus: the pointer to extended bus object | 117 | * @ebus: the pointer to extended bus object |
| 118 | */ | 118 | */ |
| 119 | void snd_hdac_ext_bus_exit(struct hdac_ext_bus *ebus) | 119 | void snd_hdac_ext_bus_exit(struct hdac_bus *bus) |
| 120 | { | 120 | { |
| 121 | snd_hdac_bus_exit(&ebus->bus); | 121 | snd_hdac_bus_exit(bus); |
| 122 | WARN_ON(!list_empty(&ebus->hlink_list)); | 122 | WARN_ON(!list_empty(&bus->hlink_list)); |
| 123 | } | 123 | } |
| 124 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_exit); | 124 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_exit); |
| 125 | 125 | ||
| @@ -135,10 +135,9 @@ static void default_release(struct device *dev) | |||
| 135 | * | 135 | * |
| 136 | * Returns zero for success or a negative error code. | 136 | * Returns zero for success or a negative error code. |
| 137 | */ | 137 | */ |
| 138 | int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *ebus, int addr) | 138 | int snd_hdac_ext_bus_device_init(struct hdac_bus *bus, int addr) |
| 139 | { | 139 | { |
| 140 | struct hdac_device *hdev = NULL; | 140 | struct hdac_device *hdev = NULL; |
| 141 | struct hdac_bus *bus = ebus_to_hbus(ebus); | ||
| 142 | char name[15]; | 141 | char name[15]; |
| 143 | int ret; | 142 | int ret; |
| 144 | 143 | ||
| @@ -148,7 +147,7 @@ int snd_hdac_ext_bus_device_init(struct hdac_ext_bus *ebus, int addr) | |||
| 148 | 147 | ||
| 149 | hdev->bus = bus; | 148 | hdev->bus = bus; |
| 150 | 149 | ||
| 151 | snprintf(name, sizeof(name), "ehdaudio%dD%d", ebus->idx, addr); | 150 | snprintf(name, sizeof(name), "ehdaudio%dD%d", bus->idx, addr); |
| 152 | 151 | ||
| 153 | ret = snd_hdac_device_init(hdev, bus, name, addr); | 152 | ret = snd_hdac_device_init(hdev, bus, name, addr); |
| 154 | if (ret < 0) { | 153 | if (ret < 0) { |
| @@ -185,14 +184,14 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_exit); | |||
| 185 | * | 184 | * |
| 186 | * @ebus: HD-audio extended bus | 185 | * @ebus: HD-audio extended bus |
| 187 | */ | 186 | */ |
| 188 | void snd_hdac_ext_bus_device_remove(struct hdac_ext_bus *ebus) | 187 | void snd_hdac_ext_bus_device_remove(struct hdac_bus *bus) |
| 189 | { | 188 | { |
| 190 | struct hdac_device *codec, *__codec; | 189 | struct hdac_device *codec, *__codec; |
| 191 | /* | 190 | /* |
| 192 | * we need to remove all the codec devices objects created in the | 191 | * we need to remove all the codec devices objects created in the |
| 193 | * snd_hdac_ext_bus_device_init | 192 | * snd_hdac_ext_bus_device_init |
| 194 | */ | 193 | */ |
| 195 | list_for_each_entry_safe(codec, __codec, &ebus->bus.codec_list, list) { | 194 | list_for_each_entry_safe(codec, __codec, &bus->codec_list, list) { |
| 196 | snd_hdac_device_unregister(codec); | 195 | snd_hdac_device_unregister(codec); |
| 197 | put_device(&codec->dev); | 196 | put_device(&codec->dev); |
| 198 | } | 197 | } |
diff --git a/sound/hda/ext/hdac_ext_controller.c b/sound/hda/ext/hdac_ext_controller.c index 84f3b8168716..72774119dd11 100644 --- a/sound/hda/ext/hdac_ext_controller.c +++ b/sound/hda/ext/hdac_ext_controller.c | |||
| @@ -39,9 +39,8 @@ | |||
| 39 | * @ebus: HD-audio extended core bus | 39 | * @ebus: HD-audio extended core bus |
| 40 | * @enable: flag to turn on/off the capability | 40 | * @enable: flag to turn on/off the capability |
| 41 | */ | 41 | */ |
| 42 | void snd_hdac_ext_bus_ppcap_enable(struct hdac_ext_bus *ebus, bool enable) | 42 | void snd_hdac_ext_bus_ppcap_enable(struct hdac_bus *bus, bool enable) |
| 43 | { | 43 | { |
| 44 | struct hdac_bus *bus = &ebus->bus; | ||
| 45 | 44 | ||
| 46 | if (!bus->ppcap) { | 45 | if (!bus->ppcap) { |
| 47 | dev_err(bus->dev, "Address of PP capability is NULL"); | 46 | dev_err(bus->dev, "Address of PP capability is NULL"); |
| @@ -60,9 +59,8 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_ppcap_enable); | |||
| 60 | * @ebus: HD-audio extended core bus | 59 | * @ebus: HD-audio extended core bus |
| 61 | * @enable: flag to enable/disable interrupt | 60 | * @enable: flag to enable/disable interrupt |
| 62 | */ | 61 | */ |
| 63 | void snd_hdac_ext_bus_ppcap_int_enable(struct hdac_ext_bus *ebus, bool enable) | 62 | void snd_hdac_ext_bus_ppcap_int_enable(struct hdac_bus *bus, bool enable) |
| 64 | { | 63 | { |
| 65 | struct hdac_bus *bus = &ebus->bus; | ||
| 66 | 64 | ||
| 67 | if (!bus->ppcap) { | 65 | if (!bus->ppcap) { |
| 68 | dev_err(bus->dev, "Address of PP capability is NULL\n"); | 66 | dev_err(bus->dev, "Address of PP capability is NULL\n"); |
| @@ -89,12 +87,11 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_ppcap_int_enable); | |||
| 89 | * in hlink_list of extended hdac bus | 87 | * in hlink_list of extended hdac bus |
| 90 | * Note: this will be freed on bus exit by driver | 88 | * Note: this will be freed on bus exit by driver |
| 91 | */ | 89 | */ |
| 92 | int snd_hdac_ext_bus_get_ml_capabilities(struct hdac_ext_bus *ebus) | 90 | int snd_hdac_ext_bus_get_ml_capabilities(struct hdac_bus *bus) |
| 93 | { | 91 | { |
| 94 | int idx; | 92 | int idx; |
| 95 | u32 link_count; | 93 | u32 link_count; |
| 96 | struct hdac_ext_link *hlink; | 94 | struct hdac_ext_link *hlink; |
| 97 | struct hdac_bus *bus = &ebus->bus; | ||
| 98 | 95 | ||
| 99 | link_count = readl(bus->mlcap + AZX_REG_ML_MLCD) + 1; | 96 | link_count = readl(bus->mlcap + AZX_REG_ML_MLCD) + 1; |
| 100 | 97 | ||
| @@ -114,7 +111,7 @@ int snd_hdac_ext_bus_get_ml_capabilities(struct hdac_ext_bus *ebus) | |||
| 114 | /* since link in On, update the ref */ | 111 | /* since link in On, update the ref */ |
| 115 | hlink->ref_count = 1; | 112 | hlink->ref_count = 1; |
| 116 | 113 | ||
| 117 | list_add_tail(&hlink->list, &ebus->hlink_list); | 114 | list_add_tail(&hlink->list, &bus->hlink_list); |
| 118 | } | 115 | } |
| 119 | 116 | ||
| 120 | return 0; | 117 | return 0; |
| @@ -127,12 +124,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_get_ml_capabilities); | |||
| 127 | * @ebus: HD-audio ext core bus | 124 | * @ebus: HD-audio ext core bus |
| 128 | */ | 125 | */ |
| 129 | 126 | ||
| 130 | void snd_hdac_link_free_all(struct hdac_ext_bus *ebus) | 127 | void snd_hdac_link_free_all(struct hdac_bus *bus) |
| 131 | { | 128 | { |
| 132 | struct hdac_ext_link *l; | 129 | struct hdac_ext_link *l; |
| 133 | 130 | ||
| 134 | while (!list_empty(&ebus->hlink_list)) { | 131 | while (!list_empty(&bus->hlink_list)) { |
| 135 | l = list_first_entry(&ebus->hlink_list, struct hdac_ext_link, list); | 132 | l = list_first_entry(&bus->hlink_list, struct hdac_ext_link, list); |
| 136 | list_del(&l->list); | 133 | list_del(&l->list); |
| 137 | kfree(l); | 134 | kfree(l); |
| 138 | } | 135 | } |
| @@ -144,7 +141,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_link_free_all); | |||
| 144 | * @ebus: HD-audio extended core bus | 141 | * @ebus: HD-audio extended core bus |
| 145 | * @codec_name: codec name | 142 | * @codec_name: codec name |
| 146 | */ | 143 | */ |
| 147 | struct hdac_ext_link *snd_hdac_ext_bus_get_link(struct hdac_ext_bus *ebus, | 144 | struct hdac_ext_link *snd_hdac_ext_bus_get_link(struct hdac_bus *bus, |
| 148 | const char *codec_name) | 145 | const char *codec_name) |
| 149 | { | 146 | { |
| 150 | int i; | 147 | int i; |
| @@ -153,10 +150,10 @@ struct hdac_ext_link *snd_hdac_ext_bus_get_link(struct hdac_ext_bus *ebus, | |||
| 153 | 150 | ||
| 154 | if (sscanf(codec_name, "ehdaudio%dD%d", &bus_idx, &addr) != 2) | 151 | if (sscanf(codec_name, "ehdaudio%dD%d", &bus_idx, &addr) != 2) |
| 155 | return NULL; | 152 | return NULL; |
| 156 | if (ebus->idx != bus_idx) | 153 | if (bus->idx != bus_idx) |
| 157 | return NULL; | 154 | return NULL; |
| 158 | 155 | ||
| 159 | list_for_each_entry(hlink, &ebus->hlink_list, list) { | 156 | list_for_each_entry(hlink, &bus->hlink_list, list) { |
| 160 | for (i = 0; i < HDA_MAX_CODECS; i++) { | 157 | for (i = 0; i < HDA_MAX_CODECS; i++) { |
| 161 | if (hlink->lsdiid & (0x1 << addr)) | 158 | if (hlink->lsdiid & (0x1 << addr)) |
| 162 | return hlink; | 159 | return hlink; |
| @@ -219,12 +216,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down); | |||
| 219 | * snd_hdac_ext_bus_link_power_up_all -power up all hda link | 216 | * snd_hdac_ext_bus_link_power_up_all -power up all hda link |
| 220 | * @ebus: HD-audio extended bus | 217 | * @ebus: HD-audio extended bus |
| 221 | */ | 218 | */ |
| 222 | int snd_hdac_ext_bus_link_power_up_all(struct hdac_ext_bus *ebus) | 219 | int snd_hdac_ext_bus_link_power_up_all(struct hdac_bus *bus) |
| 223 | { | 220 | { |
| 224 | struct hdac_ext_link *hlink = NULL; | 221 | struct hdac_ext_link *hlink = NULL; |
| 225 | int ret; | 222 | int ret; |
| 226 | 223 | ||
| 227 | list_for_each_entry(hlink, &ebus->hlink_list, list) { | 224 | list_for_each_entry(hlink, &bus->hlink_list, list) { |
| 228 | snd_hdac_updatel(hlink->ml_addr, | 225 | snd_hdac_updatel(hlink->ml_addr, |
| 229 | AZX_REG_ML_LCTL, 0, AZX_MLCTL_SPA); | 226 | AZX_REG_ML_LCTL, 0, AZX_MLCTL_SPA); |
| 230 | ret = check_hdac_link_power_active(hlink, true); | 227 | ret = check_hdac_link_power_active(hlink, true); |
| @@ -240,12 +237,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_up_all); | |||
| 240 | * snd_hdac_ext_bus_link_power_down_all -power down all hda link | 237 | * snd_hdac_ext_bus_link_power_down_all -power down all hda link |
| 241 | * @ebus: HD-audio extended bus | 238 | * @ebus: HD-audio extended bus |
| 242 | */ | 239 | */ |
| 243 | int snd_hdac_ext_bus_link_power_down_all(struct hdac_ext_bus *ebus) | 240 | int snd_hdac_ext_bus_link_power_down_all(struct hdac_bus *bus) |
| 244 | { | 241 | { |
| 245 | struct hdac_ext_link *hlink = NULL; | 242 | struct hdac_ext_link *hlink = NULL; |
| 246 | int ret; | 243 | int ret; |
| 247 | 244 | ||
| 248 | list_for_each_entry(hlink, &ebus->hlink_list, list) { | 245 | list_for_each_entry(hlink, &bus->hlink_list, list) { |
| 249 | snd_hdac_updatel(hlink->ml_addr, AZX_REG_ML_LCTL, AZX_MLCTL_SPA, 0); | 246 | snd_hdac_updatel(hlink->ml_addr, AZX_REG_ML_LCTL, AZX_MLCTL_SPA, 0); |
| 250 | ret = check_hdac_link_power_active(hlink, false); | 247 | ret = check_hdac_link_power_active(hlink, false); |
| 251 | if (ret < 0) | 248 | if (ret < 0) |
| @@ -256,39 +253,39 @@ int snd_hdac_ext_bus_link_power_down_all(struct hdac_ext_bus *ebus) | |||
| 256 | } | 253 | } |
| 257 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down_all); | 254 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down_all); |
| 258 | 255 | ||
| 259 | int snd_hdac_ext_bus_link_get(struct hdac_ext_bus *ebus, | 256 | int snd_hdac_ext_bus_link_get(struct hdac_bus *bus, |
| 260 | struct hdac_ext_link *link) | 257 | struct hdac_ext_link *link) |
| 261 | { | 258 | { |
| 262 | int ret = 0; | 259 | int ret = 0; |
| 263 | 260 | ||
| 264 | mutex_lock(&ebus->lock); | 261 | mutex_lock(&bus->lock); |
| 265 | 262 | ||
| 266 | /* | 263 | /* |
| 267 | * if we move from 0 to 1, count will be 1 so power up this link | 264 | * if we move from 0 to 1, count will be 1 so power up this link |
| 268 | * as well, also check the dma status and trigger that | 265 | * as well, also check the dma status and trigger that |
| 269 | */ | 266 | */ |
| 270 | if (++link->ref_count == 1) { | 267 | if (++link->ref_count == 1) { |
| 271 | if (!ebus->cmd_dma_state) { | 268 | if (!bus->cmd_dma_state) { |
| 272 | snd_hdac_bus_init_cmd_io(&ebus->bus); | 269 | snd_hdac_bus_init_cmd_io(bus); |
| 273 | ebus->cmd_dma_state = true; | 270 | bus->cmd_dma_state = true; |
| 274 | } | 271 | } |
| 275 | 272 | ||
| 276 | ret = snd_hdac_ext_bus_link_power_up(link); | 273 | ret = snd_hdac_ext_bus_link_power_up(link); |
| 277 | } | 274 | } |
| 278 | 275 | ||
| 279 | mutex_unlock(&ebus->lock); | 276 | mutex_unlock(&bus->lock); |
| 280 | return ret; | 277 | return ret; |
| 281 | } | 278 | } |
| 282 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_get); | 279 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_get); |
| 283 | 280 | ||
| 284 | int snd_hdac_ext_bus_link_put(struct hdac_ext_bus *ebus, | 281 | int snd_hdac_ext_bus_link_put(struct hdac_bus *bus, |
| 285 | struct hdac_ext_link *link) | 282 | struct hdac_ext_link *link) |
| 286 | { | 283 | { |
| 287 | int ret = 0; | 284 | int ret = 0; |
| 288 | struct hdac_ext_link *hlink; | 285 | struct hdac_ext_link *hlink; |
| 289 | bool link_up = false; | 286 | bool link_up = false; |
| 290 | 287 | ||
| 291 | mutex_lock(&ebus->lock); | 288 | mutex_lock(&bus->lock); |
| 292 | 289 | ||
| 293 | /* | 290 | /* |
| 294 | * if we move from 1 to 0, count will be 0 | 291 | * if we move from 1 to 0, count will be 0 |
| @@ -301,7 +298,7 @@ int snd_hdac_ext_bus_link_put(struct hdac_ext_bus *ebus, | |||
| 301 | * now check if all links are off, if so turn off | 298 | * now check if all links are off, if so turn off |
| 302 | * cmd dma as well | 299 | * cmd dma as well |
| 303 | */ | 300 | */ |
| 304 | list_for_each_entry(hlink, &ebus->hlink_list, list) { | 301 | list_for_each_entry(hlink, &bus->hlink_list, list) { |
| 305 | if (hlink->ref_count) { | 302 | if (hlink->ref_count) { |
| 306 | link_up = true; | 303 | link_up = true; |
| 307 | break; | 304 | break; |
| @@ -309,12 +306,12 @@ int snd_hdac_ext_bus_link_put(struct hdac_ext_bus *ebus, | |||
| 309 | } | 306 | } |
| 310 | 307 | ||
| 311 | if (!link_up) { | 308 | if (!link_up) { |
| 312 | snd_hdac_bus_stop_cmd_io(&ebus->bus); | 309 | snd_hdac_bus_stop_cmd_io(bus); |
| 313 | ebus->cmd_dma_state = false; | 310 | bus->cmd_dma_state = false; |
| 314 | } | 311 | } |
| 315 | } | 312 | } |
| 316 | 313 | ||
| 317 | mutex_unlock(&ebus->lock); | 314 | mutex_unlock(&bus->lock); |
| 318 | return ret; | 315 | return ret; |
| 319 | } | 316 | } |
| 320 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_put); | 317 | EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_put); |
diff --git a/sound/hda/ext/hdac_ext_stream.c b/sound/hda/ext/hdac_ext_stream.c index c96d7a7a36af..1bd27576db98 100644 --- a/sound/hda/ext/hdac_ext_stream.c +++ b/sound/hda/ext/hdac_ext_stream.c | |||
| @@ -25,7 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | /** | 26 | /** |
| 27 | * snd_hdac_ext_stream_init - initialize each stream (aka device) | 27 | * snd_hdac_ext_stream_init - initialize each stream (aka device) |
| 28 | * @ebus: HD-audio ext core bus | 28 | * @bus: HD-audio core bus |
| 29 | * @stream: HD-audio ext core stream object to initialize | 29 | * @stream: HD-audio ext core stream object to initialize |
| 30 | * @idx: stream index number | 30 | * @idx: stream index number |
| 31 | * @direction: stream direction (SNDRV_PCM_STREAM_PLAYBACK or SNDRV_PCM_STREAM_CAPTURE) | 31 | * @direction: stream direction (SNDRV_PCM_STREAM_PLAYBACK or SNDRV_PCM_STREAM_CAPTURE) |
| @@ -34,18 +34,16 @@ | |||
| 34 | * initialize the stream, if ppcap is enabled then init those and then | 34 | * initialize the stream, if ppcap is enabled then init those and then |
| 35 | * invoke hdac stream initialization routine | 35 | * invoke hdac stream initialization routine |
| 36 | */ | 36 | */ |
| 37 | void snd_hdac_ext_stream_init(struct hdac_ext_bus *ebus, | 37 | void snd_hdac_ext_stream_init(struct hdac_bus *bus, |
| 38 | struct hdac_ext_stream *stream, | 38 | struct hdac_ext_stream *stream, |
| 39 | int idx, int direction, int tag) | 39 | int idx, int direction, int tag) |
| 40 | { | 40 | { |
| 41 | struct hdac_bus *bus = &ebus->bus; | ||
| 42 | |||
| 43 | if (bus->ppcap) { | 41 | if (bus->ppcap) { |
| 44 | stream->pphc_addr = bus->ppcap + AZX_PPHC_BASE + | 42 | stream->pphc_addr = bus->ppcap + AZX_PPHC_BASE + |
| 45 | AZX_PPHC_INTERVAL * idx; | 43 | AZX_PPHC_INTERVAL * idx; |
| 46 | 44 | ||
| 47 | stream->pplc_addr = bus->ppcap + AZX_PPLC_BASE + | 45 | stream->pplc_addr = bus->ppcap + AZX_PPLC_BASE + |
| 48 | AZX_PPLC_MULTI * ebus->num_streams + | 46 | AZX_PPLC_MULTI * bus->num_streams + |
| 49 | AZX_PPLC_INTERVAL * idx; | 47 | AZX_PPLC_INTERVAL * idx; |
| 50 | } | 48 | } |
| 51 | 49 | ||
| @@ -71,12 +69,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_init); | |||
| 71 | /** | 69 | /** |
| 72 | * snd_hdac_ext_stream_init_all - create and initialize the stream objects | 70 | * snd_hdac_ext_stream_init_all - create and initialize the stream objects |
| 73 | * for an extended hda bus | 71 | * for an extended hda bus |
| 74 | * @ebus: HD-audio ext core bus | 72 | * @bus: HD-audio core bus |
| 75 | * @start_idx: start index for streams | 73 | * @start_idx: start index for streams |
| 76 | * @num_stream: number of streams to initialize | 74 | * @num_stream: number of streams to initialize |
| 77 | * @dir: direction of streams | 75 | * @dir: direction of streams |
| 78 | */ | 76 | */ |
| 79 | int snd_hdac_ext_stream_init_all(struct hdac_ext_bus *ebus, int start_idx, | 77 | int snd_hdac_ext_stream_init_all(struct hdac_bus *bus, int start_idx, |
| 80 | int num_stream, int dir) | 78 | int num_stream, int dir) |
| 81 | { | 79 | { |
| 82 | int stream_tag = 0; | 80 | int stream_tag = 0; |
| @@ -88,7 +86,7 @@ int snd_hdac_ext_stream_init_all(struct hdac_ext_bus *ebus, int start_idx, | |||
| 88 | if (!stream) | 86 | if (!stream) |
| 89 | return -ENOMEM; | 87 | return -ENOMEM; |
| 90 | tag = ++stream_tag; | 88 | tag = ++stream_tag; |
| 91 | snd_hdac_ext_stream_init(ebus, stream, idx, dir, tag); | 89 | snd_hdac_ext_stream_init(bus, stream, idx, dir, tag); |
| 92 | idx++; | 90 | idx++; |
| 93 | } | 91 | } |
| 94 | 92 | ||
| @@ -100,17 +98,16 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_init_all); | |||
| 100 | /** | 98 | /** |
| 101 | * snd_hdac_stream_free_all - free hdac extended stream objects | 99 | * snd_hdac_stream_free_all - free hdac extended stream objects |
| 102 | * | 100 | * |
| 103 | * @ebus: HD-audio ext core bus | 101 | * @bus: HD-audio core bus |
| 104 | */ | 102 | */ |
| 105 | void snd_hdac_stream_free_all(struct hdac_ext_bus *ebus) | 103 | void snd_hdac_stream_free_all(struct hdac_bus *bus) |
| 106 | { | 104 | { |
| 107 | struct hdac_stream *s, *_s; | 105 | struct hdac_stream *s, *_s; |
| 108 | struct hdac_ext_stream *stream; | 106 | struct hdac_ext_stream *stream; |
| 109 | struct hdac_bus *bus = ebus_to_hbus(ebus); | ||
| 110 | 107 | ||
| 111 | list_for_each_entry_safe(s, _s, &bus->stream_list, list) { | 108 | list_for_each_entry_safe(s, _s, &bus->stream_list, list) { |
| 112 | stream = stream_to_hdac_ext_stream(s); | 109 | stream = stream_to_hdac_ext_stream(s); |
| 113 | snd_hdac_ext_stream_decouple(ebus, stream, false); | 110 | snd_hdac_ext_stream_decouple(bus, stream, false); |
| 114 | list_del(&s->list); | 111 | list_del(&s->list); |
| 115 | kfree(stream); | 112 | kfree(stream); |
| 116 | } | 113 | } |
| @@ -119,15 +116,14 @@ EXPORT_SYMBOL_GPL(snd_hdac_stream_free_all); | |||
| 119 | 116 | ||
| 120 | /** | 117 | /** |
| 121 | * snd_hdac_ext_stream_decouple - decouple the hdac stream | 118 | * snd_hdac_ext_stream_decouple - decouple the hdac stream |
| 122 | * @ebus: HD-audio ext core bus | 119 | * @bus: HD-audio core bus |
| 123 | * @stream: HD-audio ext core stream object to initialize | 120 | * @stream: HD-audio ext core stream object to initialize |
| 124 | * @decouple: flag to decouple | 121 | * @decouple: flag to decouple |
| 125 | */ | 122 | */ |
| 126 | void snd_hdac_ext_stream_decouple(struct hdac_ext_bus *ebus, | 123 | void snd_hdac_ext_stream_decouple(struct hdac_bus *bus, |
| 127 | struct hdac_ext_stream *stream, bool decouple) | 124 | struct hdac_ext_stream *stream, bool decouple) |
| 128 | { | 125 | { |
| 129 | struct hdac_stream *hstream = &stream->hstream; | 126 | struct hdac_stream *hstream = &stream->hstream; |
| 130 | struct hdac_bus *bus = &ebus->bus; | ||
| 131 | u32 val; | 127 | u32 val; |
| 132 | int mask = AZX_PPCTL_PROCEN(hstream->index); | 128 | int mask = AZX_PPCTL_PROCEN(hstream->index); |
| 133 | 129 | ||
| @@ -251,19 +247,18 @@ void snd_hdac_ext_link_clear_stream_id(struct hdac_ext_link *link, | |||
| 251 | EXPORT_SYMBOL_GPL(snd_hdac_ext_link_clear_stream_id); | 247 | EXPORT_SYMBOL_GPL(snd_hdac_ext_link_clear_stream_id); |
| 252 | 248 | ||
| 253 | static struct hdac_ext_stream * | 249 | static struct hdac_ext_stream * |
| 254 | hdac_ext_link_stream_assign(struct hdac_ext_bus *ebus, | 250 | hdac_ext_link_stream_assign(struct hdac_bus *bus, |
| 255 | struct snd_pcm_substream *substream) | 251 | struct snd_pcm_substream *substream) |
| 256 | { | 252 | { |
| 257 | struct hdac_ext_stream *res = NULL; | 253 | struct hdac_ext_stream *res = NULL; |
| 258 | struct hdac_stream *stream = NULL; | 254 | struct hdac_stream *stream = NULL; |
| 259 | struct hdac_bus *hbus = &ebus->bus; | ||
| 260 | 255 | ||
| 261 | if (!hbus->ppcap) { | 256 | if (!bus->ppcap) { |
| 262 | dev_err(hbus->dev, "stream type not supported\n"); | 257 | dev_err(bus->dev, "stream type not supported\n"); |
| 263 | return NULL; | 258 | return NULL; |
| 264 | } | 259 | } |
| 265 | 260 | ||
| 266 | list_for_each_entry(stream, &hbus->stream_list, list) { | 261 | list_for_each_entry(stream, &bus->stream_list, list) { |
| 267 | struct hdac_ext_stream *hstream = container_of(stream, | 262 | struct hdac_ext_stream *hstream = container_of(stream, |
| 268 | struct hdac_ext_stream, | 263 | struct hdac_ext_stream, |
| 269 | hstream); | 264 | hstream); |
| @@ -277,34 +272,33 @@ hdac_ext_link_stream_assign(struct hdac_ext_bus *ebus, | |||
| 277 | } | 272 | } |
| 278 | 273 | ||
| 279 | if (!hstream->link_locked) { | 274 | if (!hstream->link_locked) { |
| 280 | snd_hdac_ext_stream_decouple(ebus, hstream, true); | 275 | snd_hdac_ext_stream_decouple(bus, hstream, true); |
| 281 | res = hstream; | 276 | res = hstream; |
| 282 | break; | 277 | break; |
| 283 | } | 278 | } |
| 284 | } | 279 | } |
| 285 | if (res) { | 280 | if (res) { |
| 286 | spin_lock_irq(&hbus->reg_lock); | 281 | spin_lock_irq(&bus->reg_lock); |
| 287 | res->link_locked = 1; | 282 | res->link_locked = 1; |
| 288 | res->link_substream = substream; | 283 | res->link_substream = substream; |
| 289 | spin_unlock_irq(&hbus->reg_lock); | 284 | spin_unlock_irq(&bus->reg_lock); |
| 290 | } | 285 | } |
| 291 | return res; | 286 | return res; |
| 292 | } | 287 | } |
| 293 | 288 | ||
| 294 | static struct hdac_ext_stream * | 289 | static struct hdac_ext_stream * |
| 295 | hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus, | 290 | hdac_ext_host_stream_assign(struct hdac_bus *bus, |
| 296 | struct snd_pcm_substream *substream) | 291 | struct snd_pcm_substream *substream) |
| 297 | { | 292 | { |
| 298 | struct hdac_ext_stream *res = NULL; | 293 | struct hdac_ext_stream *res = NULL; |
| 299 | struct hdac_stream *stream = NULL; | 294 | struct hdac_stream *stream = NULL; |
| 300 | struct hdac_bus *hbus = &ebus->bus; | ||
| 301 | 295 | ||
| 302 | if (!hbus->ppcap) { | 296 | if (!bus->ppcap) { |
| 303 | dev_err(hbus->dev, "stream type not supported\n"); | 297 | dev_err(bus->dev, "stream type not supported\n"); |
| 304 | return NULL; | 298 | return NULL; |
| 305 | } | 299 | } |
| 306 | 300 | ||
| 307 | list_for_each_entry(stream, &hbus->stream_list, list) { | 301 | list_for_each_entry(stream, &bus->stream_list, list) { |
| 308 | struct hdac_ext_stream *hstream = container_of(stream, | 302 | struct hdac_ext_stream *hstream = container_of(stream, |
| 309 | struct hdac_ext_stream, | 303 | struct hdac_ext_stream, |
| 310 | hstream); | 304 | hstream); |
| @@ -313,17 +307,17 @@ hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus, | |||
| 313 | 307 | ||
| 314 | if (!stream->opened) { | 308 | if (!stream->opened) { |
| 315 | if (!hstream->decoupled) | 309 | if (!hstream->decoupled) |
| 316 | snd_hdac_ext_stream_decouple(ebus, hstream, true); | 310 | snd_hdac_ext_stream_decouple(bus, hstream, true); |
| 317 | res = hstream; | 311 | res = hstream; |
| 318 | break; | 312 | break; |
| 319 | } | 313 | } |
| 320 | } | 314 | } |
| 321 | if (res) { | 315 | if (res) { |
| 322 | spin_lock_irq(&hbus->reg_lock); | 316 | spin_lock_irq(&bus->reg_lock); |
| 323 | res->hstream.opened = 1; | 317 | res->hstream.opened = 1; |
| 324 | res->hstream.running = 0; | 318 | res->hstream.running = 0; |
| 325 | res->hstream.substream = substream; | 319 | res->hstream.substream = substream; |
| 326 | spin_unlock_irq(&hbus->reg_lock); | 320 | spin_unlock_irq(&bus->reg_lock); |
| 327 | } | 321 | } |
| 328 | 322 | ||
| 329 | return res; | 323 | return res; |
| @@ -331,7 +325,7 @@ hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus, | |||
| 331 | 325 | ||
| 332 | /** | 326 | /** |
| 333 | * snd_hdac_ext_stream_assign - assign a stream for the PCM | 327 | * snd_hdac_ext_stream_assign - assign a stream for the PCM |
| 334 | * @ebus: HD-audio ext core bus | 328 | * @bus: HD-audio core bus |
| 335 | * @substream: PCM substream to assign | 329 | * @substream: PCM substream to assign |
| 336 | * @type: type of stream (coupled, host or link stream) | 330 | * @type: type of stream (coupled, host or link stream) |
| 337 | * | 331 | * |
| @@ -346,27 +340,26 @@ hdac_ext_host_stream_assign(struct hdac_ext_bus *ebus, | |||
| 346 | * the same stream object when it's used beforehand. when a stream is | 340 | * the same stream object when it's used beforehand. when a stream is |
| 347 | * decoupled, it becomes a host stream and link stream. | 341 | * decoupled, it becomes a host stream and link stream. |
| 348 | */ | 342 | */ |
| 349 | struct hdac_ext_stream *snd_hdac_ext_stream_assign(struct hdac_ext_bus *ebus, | 343 | struct hdac_ext_stream *snd_hdac_ext_stream_assign(struct hdac_bus *bus, |
| 350 | struct snd_pcm_substream *substream, | 344 | struct snd_pcm_substream *substream, |
| 351 | int type) | 345 | int type) |
| 352 | { | 346 | { |
| 353 | struct hdac_ext_stream *hstream = NULL; | 347 | struct hdac_ext_stream *hstream = NULL; |
| 354 | struct hdac_stream *stream = NULL; | 348 | struct hdac_stream *stream = NULL; |
| 355 | struct hdac_bus *hbus = &ebus->bus; | ||
| 356 | 349 | ||
| 357 | switch (type) { | 350 | switch (type) { |
| 358 | case HDAC_EXT_STREAM_TYPE_COUPLED: | 351 | case HDAC_EXT_STREAM_TYPE_COUPLED: |
| 359 | stream = snd_hdac_stream_assign(hbus, substream); | 352 | stream = snd_hdac_stream_assign(bus, substream); |
| 360 | if (stream) | 353 | if (stream) |
| 361 | hstream = container_of(stream, | 354 | hstream = container_of(stream, |
| 362 | struct hdac_ext_stream, hstream); | 355 | struct hdac_ext_stream, hstream); |
| 363 | return hstream; | 356 | return hstream; |
| 364 | 357 | ||
| 365 | case HDAC_EXT_STREAM_TYPE_HOST: | 358 | case HDAC_EXT_STREAM_TYPE_HOST: |
| 366 | return hdac_ext_host_stream_assign(ebus, substream); | 359 | return hdac_ext_host_stream_assign(bus, substream); |
| 367 | 360 | ||
| 368 | case HDAC_EXT_STREAM_TYPE_LINK: | 361 | case HDAC_EXT_STREAM_TYPE_LINK: |
| 369 | return hdac_ext_link_stream_assign(ebus, substream); | 362 | return hdac_ext_link_stream_assign(bus, substream); |
| 370 | 363 | ||
| 371 | default: | 364 | default: |
| 372 | return NULL; | 365 | return NULL; |
| @@ -384,7 +377,6 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_assign); | |||
| 384 | void snd_hdac_ext_stream_release(struct hdac_ext_stream *stream, int type) | 377 | void snd_hdac_ext_stream_release(struct hdac_ext_stream *stream, int type) |
| 385 | { | 378 | { |
| 386 | struct hdac_bus *bus = stream->hstream.bus; | 379 | struct hdac_bus *bus = stream->hstream.bus; |
| 387 | struct hdac_ext_bus *ebus = hbus_to_ebus(bus); | ||
| 388 | 380 | ||
| 389 | switch (type) { | 381 | switch (type) { |
| 390 | case HDAC_EXT_STREAM_TYPE_COUPLED: | 382 | case HDAC_EXT_STREAM_TYPE_COUPLED: |
| @@ -393,13 +385,13 @@ void snd_hdac_ext_stream_release(struct hdac_ext_stream *stream, int type) | |||
| 393 | 385 | ||
| 394 | case HDAC_EXT_STREAM_TYPE_HOST: | 386 | case HDAC_EXT_STREAM_TYPE_HOST: |
| 395 | if (stream->decoupled && !stream->link_locked) | 387 | if (stream->decoupled && !stream->link_locked) |
| 396 | snd_hdac_ext_stream_decouple(ebus, stream, false); | 388 | snd_hdac_ext_stream_decouple(bus, stream, false); |
| 397 | snd_hdac_stream_release(&stream->hstream); | 389 | snd_hdac_stream_release(&stream->hstream); |
| 398 | break; | 390 | break; |
| 399 | 391 | ||
| 400 | case HDAC_EXT_STREAM_TYPE_LINK: | 392 | case HDAC_EXT_STREAM_TYPE_LINK: |
| 401 | if (stream->decoupled && !stream->hstream.opened) | 393 | if (stream->decoupled && !stream->hstream.opened) |
| 402 | snd_hdac_ext_stream_decouple(ebus, stream, false); | 394 | snd_hdac_ext_stream_decouple(bus, stream, false); |
| 403 | spin_lock_irq(&bus->reg_lock); | 395 | spin_lock_irq(&bus->reg_lock); |
| 404 | stream->link_locked = 0; | 396 | stream->link_locked = 0; |
| 405 | stream->link_substream = NULL; | 397 | stream->link_substream = NULL; |
| @@ -415,16 +407,15 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_release); | |||
| 415 | 407 | ||
| 416 | /** | 408 | /** |
| 417 | * snd_hdac_ext_stream_spbcap_enable - enable SPIB for a stream | 409 | * snd_hdac_ext_stream_spbcap_enable - enable SPIB for a stream |
| 418 | * @ebus: HD-audio ext core bus | 410 | * @bus: HD-audio core bus |
| 419 | * @enable: flag to enable/disable SPIB | 411 | * @enable: flag to enable/disable SPIB |
| 420 | * @index: stream index for which SPIB need to be enabled | 412 | * @index: stream index for which SPIB need to be enabled |
| 421 | */ | 413 | */ |
| 422 | void snd_hdac_ext_stream_spbcap_enable(struct hdac_ext_bus *ebus, | 414 | void snd_hdac_ext_stream_spbcap_enable(struct hdac_bus *bus, |
| 423 | bool enable, int index) | 415 | bool enable, int index) |
| 424 | { | 416 | { |
| 425 | u32 mask = 0; | 417 | u32 mask = 0; |
| 426 | u32 register_mask = 0; | 418 | u32 register_mask = 0; |
| 427 | struct hdac_bus *bus = &ebus->bus; | ||
| 428 | 419 | ||
| 429 | if (!bus->spbcap) { | 420 | if (!bus->spbcap) { |
| 430 | dev_err(bus->dev, "Address of SPB capability is NULL\n"); | 421 | dev_err(bus->dev, "Address of SPB capability is NULL\n"); |
| @@ -446,14 +437,13 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_spbcap_enable); | |||
| 446 | 437 | ||
| 447 | /** | 438 | /** |
| 448 | * snd_hdac_ext_stream_set_spib - sets the spib value of a stream | 439 | * snd_hdac_ext_stream_set_spib - sets the spib value of a stream |
| 449 | * @ebus: HD-audio ext core bus | 440 | * @bus: HD-audio core bus |
| 450 | * @stream: hdac_ext_stream | 441 | * @stream: hdac_ext_stream |
| 451 | * @value: spib value to set | 442 | * @value: spib value to set |
| 452 | */ | 443 | */ |
| 453 | int snd_hdac_ext_stream_set_spib(struct hdac_ext_bus *ebus, | 444 | int snd_hdac_ext_stream_set_spib(struct hdac_bus *bus, |
| 454 | struct hdac_ext_stream *stream, u32 value) | 445 | struct hdac_ext_stream *stream, u32 value) |
| 455 | { | 446 | { |
| 456 | struct hdac_bus *bus = &ebus->bus; | ||
| 457 | 447 | ||
| 458 | if (!bus->spbcap) { | 448 | if (!bus->spbcap) { |
| 459 | dev_err(bus->dev, "Address of SPB capability is NULL\n"); | 449 | dev_err(bus->dev, "Address of SPB capability is NULL\n"); |
| @@ -468,15 +458,14 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_set_spib); | |||
| 468 | 458 | ||
| 469 | /** | 459 | /** |
| 470 | * snd_hdac_ext_stream_get_spbmaxfifo - gets the spib value of a stream | 460 | * snd_hdac_ext_stream_get_spbmaxfifo - gets the spib value of a stream |
| 471 | * @ebus: HD-audio ext core bus | 461 | * @bus: HD-audio core bus |
| 472 | * @stream: hdac_ext_stream | 462 | * @stream: hdac_ext_stream |
| 473 | * | 463 | * |
| 474 | * Return maxfifo for the stream | 464 | * Return maxfifo for the stream |
| 475 | */ | 465 | */ |
| 476 | int snd_hdac_ext_stream_get_spbmaxfifo(struct hdac_ext_bus *ebus, | 466 | int snd_hdac_ext_stream_get_spbmaxfifo(struct hdac_bus *bus, |
| 477 | struct hdac_ext_stream *stream) | 467 | struct hdac_ext_stream *stream) |
| 478 | { | 468 | { |
| 479 | struct hdac_bus *bus = &ebus->bus; | ||
| 480 | 469 | ||
| 481 | if (!bus->spbcap) { | 470 | if (!bus->spbcap) { |
| 482 | dev_err(bus->dev, "Address of SPB capability is NULL\n"); | 471 | dev_err(bus->dev, "Address of SPB capability is NULL\n"); |
| @@ -490,11 +479,10 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_get_spbmaxfifo); | |||
| 490 | 479 | ||
| 491 | /** | 480 | /** |
| 492 | * snd_hdac_ext_stop_streams - stop all stream if running | 481 | * snd_hdac_ext_stop_streams - stop all stream if running |
| 493 | * @ebus: HD-audio ext core bus | 482 | * @bus: HD-audio core bus |
| 494 | */ | 483 | */ |
| 495 | void snd_hdac_ext_stop_streams(struct hdac_ext_bus *ebus) | 484 | void snd_hdac_ext_stop_streams(struct hdac_bus *bus) |
| 496 | { | 485 | { |
| 497 | struct hdac_bus *bus = ebus_to_hbus(ebus); | ||
| 498 | struct hdac_stream *stream; | 486 | struct hdac_stream *stream; |
| 499 | 487 | ||
| 500 | if (bus->chip_init) { | 488 | if (bus->chip_init) { |
| @@ -507,16 +495,15 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stop_streams); | |||
| 507 | 495 | ||
| 508 | /** | 496 | /** |
| 509 | * snd_hdac_ext_stream_drsm_enable - enable DMA resume for a stream | 497 | * snd_hdac_ext_stream_drsm_enable - enable DMA resume for a stream |
| 510 | * @ebus: HD-audio ext core bus | 498 | * @bus: HD-audio core bus |
| 511 | * @enable: flag to enable/disable DRSM | 499 | * @enable: flag to enable/disable DRSM |
| 512 | * @index: stream index for which DRSM need to be enabled | 500 | * @index: stream index for which DRSM need to be enabled |
| 513 | */ | 501 | */ |
| 514 | void snd_hdac_ext_stream_drsm_enable(struct hdac_ext_bus *ebus, | 502 | void snd_hdac_ext_stream_drsm_enable(struct hdac_bus *bus, |
| 515 | bool enable, int index) | 503 | bool enable, int index) |
| 516 | { | 504 | { |
| 517 | u32 mask = 0; | 505 | u32 mask = 0; |
| 518 | u32 register_mask = 0; | 506 | u32 register_mask = 0; |
| 519 | struct hdac_bus *bus = &ebus->bus; | ||
| 520 | 507 | ||
| 521 | if (!bus->drsmcap) { | 508 | if (!bus->drsmcap) { |
| 522 | dev_err(bus->dev, "Address of DRSM capability is NULL\n"); | 509 | dev_err(bus->dev, "Address of DRSM capability is NULL\n"); |
| @@ -538,14 +525,13 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_drsm_enable); | |||
| 538 | 525 | ||
| 539 | /** | 526 | /** |
| 540 | * snd_hdac_ext_stream_set_dpibr - sets the dpibr value of a stream | 527 | * snd_hdac_ext_stream_set_dpibr - sets the dpibr value of a stream |
| 541 | * @ebus: HD-audio ext core bus | 528 | * @bus: HD-audio core bus |
| 542 | * @stream: hdac_ext_stream | 529 | * @stream: hdac_ext_stream |
| 543 | * @value: dpib value to set | 530 | * @value: dpib value to set |
| 544 | */ | 531 | */ |
| 545 | int snd_hdac_ext_stream_set_dpibr(struct hdac_ext_bus *ebus, | 532 | int snd_hdac_ext_stream_set_dpibr(struct hdac_bus *bus, |
| 546 | struct hdac_ext_stream *stream, u32 value) | 533 | struct hdac_ext_stream *stream, u32 value) |
| 547 | { | 534 | { |
| 548 | struct hdac_bus *bus = &ebus->bus; | ||
| 549 | 535 | ||
| 550 | if (!bus->drsmcap) { | 536 | if (!bus->drsmcap) { |
| 551 | dev_err(bus->dev, "Address of DRSM capability is NULL\n"); | 537 | dev_err(bus->dev, "Address of DRSM capability is NULL\n"); |
| @@ -560,7 +546,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_stream_set_dpibr); | |||
| 560 | 546 | ||
| 561 | /** | 547 | /** |
| 562 | * snd_hdac_ext_stream_set_lpib - sets the lpib value of a stream | 548 | * snd_hdac_ext_stream_set_lpib - sets the lpib value of a stream |
| 563 | * @ebus: HD-audio ext core bus | 549 | * @bus: HD-audio core bus |
| 564 | * @stream: hdac_ext_stream | 550 | * @stream: hdac_ext_stream |
| 565 | * @value: lpib value to set | 551 | * @value: lpib value to set |
| 566 | */ | 552 | */ |
