|
@@ -257,8 +257,8 @@ static void omap_st_on(struct omap_mcbsp *mcbsp)
|
|
|
{
|
|
|
unsigned int w;
|
|
|
|
|
|
- if (mcbsp->pdata->enable_st_clock)
|
|
|
- mcbsp->pdata->enable_st_clock(mcbsp->id, 1);
|
|
|
+ if (mcbsp->pdata->force_ick_on)
|
|
|
+ mcbsp->pdata->force_ick_on(mcbsp->st_data->mcbsp_iclk, true);
|
|
|
|
|
|
/* Disable Sidetone clock auto-gating for normal operation */
|
|
|
w = MCBSP_ST_READ(mcbsp, SYSCONFIG);
|
|
@@ -287,8 +287,8 @@ static void omap_st_off(struct omap_mcbsp *mcbsp)
|
|
|
w = MCBSP_ST_READ(mcbsp, SYSCONFIG);
|
|
|
MCBSP_ST_WRITE(mcbsp, SYSCONFIG, w | ST_AUTOIDLE);
|
|
|
|
|
|
- if (mcbsp->pdata->enable_st_clock)
|
|
|
- mcbsp->pdata->enable_st_clock(mcbsp->id, 0);
|
|
|
+ if (mcbsp->pdata->force_ick_on)
|
|
|
+ mcbsp->pdata->force_ick_on(mcbsp->st_data->mcbsp_iclk, false);
|
|
|
}
|
|
|
|
|
|
static void omap_st_fir_write(struct omap_mcbsp *mcbsp, s16 *fir)
|
|
@@ -946,6 +946,13 @@ static int omap_st_add(struct omap_mcbsp *mcbsp, struct resource *res)
|
|
|
if (!st_data)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
+ st_data->mcbsp_iclk = clk_get(mcbsp->dev, "ick");
|
|
|
+ if (IS_ERR(st_data->mcbsp_iclk)) {
|
|
|
+ dev_warn(mcbsp->dev,
|
|
|
+ "Failed to get ick, sidetone might be broken\n");
|
|
|
+ st_data->mcbsp_iclk = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
st_data->io_base_st = devm_ioremap(mcbsp->dev, res->start,
|
|
|
resource_size(res));
|
|
|
if (!st_data->io_base_st)
|
|
@@ -1093,6 +1100,8 @@ void omap_mcbsp_cleanup(struct omap_mcbsp *mcbsp)
|
|
|
if (mcbsp->pdata->buffer_size)
|
|
|
sysfs_remove_group(&mcbsp->dev->kobj, &additional_attr_group);
|
|
|
|
|
|
- if (mcbsp->st_data)
|
|
|
+ if (mcbsp->st_data) {
|
|
|
sysfs_remove_group(&mcbsp->dev->kobj, &sidetone_attr_group);
|
|
|
+ clk_put(mcbsp->st_data->mcbsp_iclk);
|
|
|
+ }
|
|
|
}
|