Commit d395fd78 authored by Lucas Tanure's avatar Lucas Tanure Committed by Takashi Iwai
Browse files

ALSA: hda/cs8409: Avoid setting the same I2C address for every access

parent 647d50a0
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -155,6 +155,21 @@ static int cs8409_i2c_wait_complete(struct hda_codec *codec)
	return -1;
}

/**
 * cs8409_set_i2c_dev_addr - Set i2c address for transaction
 * @codec: the codec instance
 * @addr: I2C Address
 */
static void cs8409_set_i2c_dev_addr(struct hda_codec *codec, unsigned int addr)
{
	struct cs8409_spec *spec = codec->spec;

	if (spec->dev_addr != addr) {
		cs8409_vendor_coef_set(codec, CS8409_I2C_ADDR, addr);
		spec->dev_addr = addr;
	}
}

/**
 * cs8409_i2c_read - CS8409 I2C Read.
 * @codec: the codec instance
@@ -176,7 +191,7 @@ static int cs8409_i2c_read(struct hda_codec *codec, unsigned int i2c_address, un
		return -EPERM;

	cs8409_enable_i2c_clock(codec);
	cs8409_vendor_coef_set(codec, CS8409_I2C_ADDR, i2c_address);
	cs8409_set_i2c_dev_addr(codec, i2c_address);

	if (paged) {
		cs8409_vendor_coef_set(codec, CS8409_I2C_QWRITE, i2c_reg >> 8);
@@ -222,7 +237,7 @@ static int cs8409_i2c_write(struct hda_codec *codec, unsigned int i2c_address, u
		return -EPERM;

	cs8409_enable_i2c_clock(codec);
	cs8409_vendor_coef_set(codec, CS8409_I2C_ADDR, i2c_address);
	cs8409_set_i2c_dev_addr(codec, i2c_address);

	if (paged) {
		cs8409_vendor_coef_set(codec, CS8409_I2C_QWRITE, i2c_reg >> 8);
+1 −0
Original line number Diff line number Diff line
@@ -281,6 +281,7 @@ struct cs8409_spec {

	struct mutex cs8409_i2c_mux;
	unsigned int i2c_clck_enabled;
	unsigned int dev_addr;
	struct delayed_work i2c_clk_work;

	/* verb exec op override */