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
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);
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);