Loading sound/soc/codecs/wcd9335.c +61 −7 Original line number Diff line number Diff line Loading @@ -12877,6 +12877,38 @@ err: return ret; } static int tasha_swrm_i2s_bulk_write(struct wcd9xxx *wcd9xxx, struct wcd9xxx_reg_val *bulk_reg, size_t len) { int i, ret = 0; unsigned short swr_wr_addr_base; unsigned short swr_wr_data_base; swr_wr_addr_base = WCD9335_SWR_AHB_BRIDGE_WR_ADDR_0; swr_wr_data_base = WCD9335_SWR_AHB_BRIDGE_WR_DATA_0; for (i = 0; i < (len * 2); i += 2) { /* First Write the Data to register */ ret = wcd9xxx_bulk_write(&wcd9xxx->core_res, swr_wr_data_base, 4, bulk_reg[i].buf); if (ret < 0) { dev_err(wcd9xxx->dev, "%s: WR Data Failure\n", __func__); break; } /* Next Write Address */ ret = wcd9xxx_bulk_write(&wcd9xxx->core_res, swr_wr_addr_base, 4, bulk_reg[i+1].buf); if (ret < 0) { dev_err(wcd9xxx->dev, "%s: WR Addr Failure\n", __func__); break; } } return ret; } static int tasha_swrm_bulk_write(void *handle, u32 *reg, u32 *val, size_t len) { struct tasha_priv *tasha; Loading Loading @@ -12914,10 +12946,22 @@ static int tasha_swrm_bulk_write(void *handle, u32 *reg, u32 *val, size_t len) bulk_reg[i+1].bytes = 4; } mutex_lock(&tasha->swr_write_lock); ret = wcd9xxx_slim_bulk_write(wcd9xxx, bulk_reg, (len * 2), false); if (ret) if (wcd9xxx_get_intf_type() == WCD9XXX_INTERFACE_TYPE_I2C) { ret = tasha_swrm_i2s_bulk_write(wcd9xxx, bulk_reg, len); if (ret) { dev_err(tasha->dev, "%s: i2s bulk write failed, ret: %d\n", __func__, ret); } } else { ret = wcd9xxx_slim_bulk_write(wcd9xxx, bulk_reg, (len * 2), false); if (ret) { dev_err(tasha->dev, "%s: swrm bulk write failed, ret: %d\n", __func__, ret); } } mutex_unlock(&tasha->swr_write_lock); kfree(bulk_reg); Loading Loading @@ -12952,9 +12996,19 @@ static int tasha_swrm_write(void *handle, int reg, int val) bulk_reg[1].bytes = 4; mutex_lock(&tasha->swr_write_lock); if (wcd9xxx_get_intf_type() == WCD9XXX_INTERFACE_TYPE_I2C) { ret = tasha_swrm_i2s_bulk_write(wcd9xxx, bulk_reg, 1); if (ret) { dev_err(tasha->dev, "%s: i2s swrm write failed, ret: %d\n", __func__, ret); } } else { ret = wcd9xxx_slim_bulk_write(wcd9xxx, bulk_reg, 2, false); if (ret < 0) pr_err("%s: WR Data Failure\n", __func__); } mutex_unlock(&tasha->swr_write_lock); return ret; } Loading Loading
sound/soc/codecs/wcd9335.c +61 −7 Original line number Diff line number Diff line Loading @@ -12877,6 +12877,38 @@ err: return ret; } static int tasha_swrm_i2s_bulk_write(struct wcd9xxx *wcd9xxx, struct wcd9xxx_reg_val *bulk_reg, size_t len) { int i, ret = 0; unsigned short swr_wr_addr_base; unsigned short swr_wr_data_base; swr_wr_addr_base = WCD9335_SWR_AHB_BRIDGE_WR_ADDR_0; swr_wr_data_base = WCD9335_SWR_AHB_BRIDGE_WR_DATA_0; for (i = 0; i < (len * 2); i += 2) { /* First Write the Data to register */ ret = wcd9xxx_bulk_write(&wcd9xxx->core_res, swr_wr_data_base, 4, bulk_reg[i].buf); if (ret < 0) { dev_err(wcd9xxx->dev, "%s: WR Data Failure\n", __func__); break; } /* Next Write Address */ ret = wcd9xxx_bulk_write(&wcd9xxx->core_res, swr_wr_addr_base, 4, bulk_reg[i+1].buf); if (ret < 0) { dev_err(wcd9xxx->dev, "%s: WR Addr Failure\n", __func__); break; } } return ret; } static int tasha_swrm_bulk_write(void *handle, u32 *reg, u32 *val, size_t len) { struct tasha_priv *tasha; Loading Loading @@ -12914,10 +12946,22 @@ static int tasha_swrm_bulk_write(void *handle, u32 *reg, u32 *val, size_t len) bulk_reg[i+1].bytes = 4; } mutex_lock(&tasha->swr_write_lock); ret = wcd9xxx_slim_bulk_write(wcd9xxx, bulk_reg, (len * 2), false); if (ret) if (wcd9xxx_get_intf_type() == WCD9XXX_INTERFACE_TYPE_I2C) { ret = tasha_swrm_i2s_bulk_write(wcd9xxx, bulk_reg, len); if (ret) { dev_err(tasha->dev, "%s: i2s bulk write failed, ret: %d\n", __func__, ret); } } else { ret = wcd9xxx_slim_bulk_write(wcd9xxx, bulk_reg, (len * 2), false); if (ret) { dev_err(tasha->dev, "%s: swrm bulk write failed, ret: %d\n", __func__, ret); } } mutex_unlock(&tasha->swr_write_lock); kfree(bulk_reg); Loading Loading @@ -12952,9 +12996,19 @@ static int tasha_swrm_write(void *handle, int reg, int val) bulk_reg[1].bytes = 4; mutex_lock(&tasha->swr_write_lock); if (wcd9xxx_get_intf_type() == WCD9XXX_INTERFACE_TYPE_I2C) { ret = tasha_swrm_i2s_bulk_write(wcd9xxx, bulk_reg, 1); if (ret) { dev_err(tasha->dev, "%s: i2s swrm write failed, ret: %d\n", __func__, ret); } } else { ret = wcd9xxx_slim_bulk_write(wcd9xxx, bulk_reg, 2, false); if (ret < 0) pr_err("%s: WR Data Failure\n", __func__); } mutex_unlock(&tasha->swr_write_lock); return ret; } Loading