Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −20
Original line number Diff line number Diff line
@@ -507,25 +507,6 @@ static int snd_hda_bus_dev_disconnect(struct snd_device *device)
	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
 * @card: the card entry
@@ -534,6 +515,7 @@ static const struct hdac_bus_ops bus_ops = {
 * Returns 0 if successful, or a negative error code.
 */
int snd_hda_bus_new(struct snd_card *card,
		    const struct hdac_bus_ops *ops,
		    struct hda_bus **busp)
{
	struct hda_bus *bus;
@@ -550,7 +532,7 @@ int snd_hda_bus_new(struct snd_card *card,
	if (!bus)
		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) {
		kfree(bus);
		return err;
+6 −5
Original line number Diff line number Diff line
@@ -42,10 +42,6 @@ struct hda_pcm_stream;

/* bus operators */
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 */
	void (*private_free)(struct hda_bus *);
	/* attach a PCM stream */
@@ -99,6 +95,9 @@ struct hda_bus {
	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
 *
@@ -327,7 +326,9 @@ struct hda_codec {
/*
 * 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,
		      unsigned int codec_addr, struct hda_codec **codecp);
int snd_hda_codec_configure(struct hda_codec *codec);
+15 −9
Original line number Diff line number Diff line
@@ -1328,8 +1328,9 @@ static int azx_single_get_response(struct hda_bus *bus, unsigned int addr,
 */

/* 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;

	if (chip->disabled)
@@ -1342,9 +1343,10 @@ static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
}

/* 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)
{
	struct hda_bus *bus = to_hda_bus(_bus);
	struct azx *chip = bus->private_data;
	if (chip->disabled)
		return 0;
@@ -1354,6 +1356,11 @@ static int azx_get_response(struct hda_bus *bus, unsigned int addr,
		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
/*
 * DSP loading code (e.g. for CA0132)
@@ -1762,15 +1769,16 @@ static int probe_codec(struct azx *chip, int addr)
{
	unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
		(AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
	struct hdac_bus *bus = &chip->bus->core;
	int err;
	unsigned int res;

	mutex_lock(&chip->bus->core.cmd_mutex);
	mutex_lock(&bus->cmd_mutex);
	chip->probing = 1;
	azx_send_cmd(chip->bus, cmd);
	err = azx_get_response(chip->bus, addr, &res);
	azx_send_cmd(bus, cmd);
	err = azx_get_response(bus, addr, &res);
	chip->probing = 0;
	mutex_unlock(&chip->bus->core.cmd_mutex);
	mutex_unlock(&bus->cmd_mutex);
	if (err < 0 || res == -1)
		return -EIO;
	dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
@@ -1811,8 +1819,6 @@ static int get_jackpoll_interval(struct azx *chip)
}

static struct hda_bus_ops bus_ops = {
	.command = azx_send_cmd,
	.get_response = azx_get_response,
	.attach_pcm = azx_attach_pcm_stream,
	.bus_reset = azx_bus_reset,
#ifdef CONFIG_SND_HDA_DSP_LOADER
@@ -1828,7 +1834,7 @@ int azx_bus_create(struct azx *chip, const char *model)
	struct hda_bus *bus;
	int err;

	err = snd_hda_bus_new(chip->card, &bus);
	err = snd_hda_bus_new(chip->card, &bus_core_ops, &bus);
	if (err < 0)
		return err;