Commit 7e8be1b3 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Move send_cmd / get_response to hdac_bus_ops

One less redirection.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent fb3b07c2
...@@ -507,25 +507,6 @@ static int snd_hda_bus_dev_disconnect(struct snd_device *device) ...@@ -507,25 +507,6 @@ static int snd_hda_bus_dev_disconnect(struct snd_device *device)
return 0; return 0;
} }
/* hdac_bus_ops translations */
static int _hda_bus_command(struct hdac_bus *_bus, unsigned int cmd)
{
struct hda_bus *bus = container_of(_bus, struct hda_bus, core);
return bus->ops.command(bus, cmd);
}
static int _hda_bus_get_response(struct hdac_bus *_bus, unsigned int addr,
unsigned int *res)
{
struct hda_bus *bus = container_of(_bus, struct hda_bus, core);
return bus->ops.get_response(bus, addr, res);
}
static const struct hdac_bus_ops bus_ops = {
.command = _hda_bus_command,
.get_response = _hda_bus_get_response,
};
/** /**
* snd_hda_bus_new - create a HDA bus * snd_hda_bus_new - create a HDA bus
* @card: the card entry * @card: the card entry
...@@ -534,6 +515,7 @@ static const struct hdac_bus_ops bus_ops = { ...@@ -534,6 +515,7 @@ static const struct hdac_bus_ops bus_ops = {
* Returns 0 if successful, or a negative error code. * Returns 0 if successful, or a negative error code.
*/ */
int snd_hda_bus_new(struct snd_card *card, int snd_hda_bus_new(struct snd_card *card,
const struct hdac_bus_ops *ops,
struct hda_bus **busp) struct hda_bus **busp)
{ {
struct hda_bus *bus; struct hda_bus *bus;
...@@ -550,7 +532,7 @@ int snd_hda_bus_new(struct snd_card *card, ...@@ -550,7 +532,7 @@ int snd_hda_bus_new(struct snd_card *card,
if (!bus) if (!bus)
return -ENOMEM; return -ENOMEM;
err = snd_hdac_bus_init(&bus->core, card->dev, &bus_ops, NULL); err = snd_hdac_bus_init(&bus->core, card->dev, ops, NULL);
if (err < 0) { if (err < 0) {
kfree(bus); kfree(bus);
return err; return err;
......
...@@ -42,10 +42,6 @@ struct hda_pcm_stream; ...@@ -42,10 +42,6 @@ struct hda_pcm_stream;
/* bus operators */ /* bus operators */
struct hda_bus_ops { struct hda_bus_ops {
/* send a single command */
int (*command)(struct hda_bus *bus, unsigned int cmd);
/* get a response from the last command */
int (*get_response)(struct hda_bus *bus, unsigned int addr, unsigned int *res);
/* free the private data */ /* free the private data */
void (*private_free)(struct hda_bus *); void (*private_free)(struct hda_bus *);
/* attach a PCM stream */ /* attach a PCM stream */
...@@ -99,6 +95,9 @@ struct hda_bus { ...@@ -99,6 +95,9 @@ struct hda_bus {
int primary_dig_out_type; /* primary digital out PCM type */ int primary_dig_out_type; /* primary digital out PCM type */
}; };
/* from hdac_bus to hda_bus */
#define to_hda_bus(bus) container_of(bus, struct hda_bus, core)
/* /*
* codec preset * codec preset
* *
...@@ -327,7 +326,9 @@ struct hda_codec { ...@@ -327,7 +326,9 @@ struct hda_codec {
/* /*
* constructors * constructors
*/ */
int snd_hda_bus_new(struct snd_card *card, struct hda_bus **busp); int snd_hda_bus_new(struct snd_card *card,
const struct hdac_bus_ops *ops,
struct hda_bus **busp);
int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card, int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
unsigned int codec_addr, struct hda_codec **codecp); unsigned int codec_addr, struct hda_codec **codecp);
int snd_hda_codec_configure(struct hda_codec *codec); int snd_hda_codec_configure(struct hda_codec *codec);
......
...@@ -1328,8 +1328,9 @@ static int azx_single_get_response(struct hda_bus *bus, unsigned int addr, ...@@ -1328,8 +1328,9 @@ static int azx_single_get_response(struct hda_bus *bus, unsigned int addr,
*/ */
/* send a command */ /* send a command */
static int azx_send_cmd(struct hda_bus *bus, unsigned int val) static int azx_send_cmd(struct hdac_bus *_bus, unsigned int val)
{ {
struct hda_bus *bus = to_hda_bus(_bus);
struct azx *chip = bus->private_data; struct azx *chip = bus->private_data;
if (chip->disabled) if (chip->disabled)
...@@ -1342,9 +1343,10 @@ static int azx_send_cmd(struct hda_bus *bus, unsigned int val) ...@@ -1342,9 +1343,10 @@ static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
} }
/* get a response */ /* get a response */
static int azx_get_response(struct hda_bus *bus, unsigned int addr, static int azx_get_response(struct hdac_bus *_bus, unsigned int addr,
unsigned int *res) unsigned int *res)
{ {
struct hda_bus *bus = to_hda_bus(_bus);
struct azx *chip = bus->private_data; struct azx *chip = bus->private_data;
if (chip->disabled) if (chip->disabled)
return 0; return 0;
...@@ -1354,6 +1356,11 @@ static int azx_get_response(struct hda_bus *bus, unsigned int addr, ...@@ -1354,6 +1356,11 @@ static int azx_get_response(struct hda_bus *bus, unsigned int addr,
return azx_rirb_get_response(bus, addr, res); return azx_rirb_get_response(bus, addr, res);
} }
static const struct hdac_bus_ops bus_core_ops = {
.command = azx_send_cmd,
.get_response = azx_get_response,
};
#ifdef CONFIG_SND_HDA_DSP_LOADER #ifdef CONFIG_SND_HDA_DSP_LOADER
/* /*
* DSP loading code (e.g. for CA0132) * DSP loading code (e.g. for CA0132)
...@@ -1762,15 +1769,16 @@ static int probe_codec(struct azx *chip, int addr) ...@@ -1762,15 +1769,16 @@ static int probe_codec(struct azx *chip, int addr)
{ {
unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) | unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
(AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID; (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
struct hdac_bus *bus = &chip->bus->core;
int err; int err;
unsigned int res; unsigned int res;
mutex_lock(&chip->bus->core.cmd_mutex); mutex_lock(&bus->cmd_mutex);
chip->probing = 1; chip->probing = 1;
azx_send_cmd(chip->bus, cmd); azx_send_cmd(bus, cmd);
err = azx_get_response(chip->bus, addr, &res); err = azx_get_response(bus, addr, &res);
chip->probing = 0; chip->probing = 0;
mutex_unlock(&chip->bus->core.cmd_mutex); mutex_unlock(&bus->cmd_mutex);
if (err < 0 || res == -1) if (err < 0 || res == -1)
return -EIO; return -EIO;
dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr); dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
...@@ -1811,8 +1819,6 @@ static int get_jackpoll_interval(struct azx *chip) ...@@ -1811,8 +1819,6 @@ static int get_jackpoll_interval(struct azx *chip)
} }
static struct hda_bus_ops bus_ops = { static struct hda_bus_ops bus_ops = {
.command = azx_send_cmd,
.get_response = azx_get_response,
.attach_pcm = azx_attach_pcm_stream, .attach_pcm = azx_attach_pcm_stream,
.bus_reset = azx_bus_reset, .bus_reset = azx_bus_reset,
#ifdef CONFIG_SND_HDA_DSP_LOADER #ifdef CONFIG_SND_HDA_DSP_LOADER
...@@ -1828,7 +1834,7 @@ int azx_bus_create(struct azx *chip, const char *model) ...@@ -1828,7 +1834,7 @@ int azx_bus_create(struct azx *chip, const char *model)
struct hda_bus *bus; struct hda_bus *bus;
int err; int err;
err = snd_hda_bus_new(chip->card, &bus); err = snd_hda_bus_new(chip->card, &bus_core_ops, &bus);
if (err < 0) if (err < 0)
return err; return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment