mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
audio: always on DDR arb [1/1]
PD#TV-3452 Problem: Toddr stuck after a long time playback. Solution: For debug usage. Verify: No need. Change-Id: Ibf4446148f5e028040d7d6527c7695f23f964f7c Signed-off-by: Shuai Li <shuai.li@amlogic.com> Signed-off-by: Zhe Wang <Zhe.Wang@amlogic.com>
This commit is contained in:
@@ -96,8 +96,9 @@ static struct toddr *register_toddr_l(struct device *dev,
|
|||||||
}
|
}
|
||||||
/* enable audio ddr arb */
|
/* enable audio ddr arb */
|
||||||
mask_bit = i;
|
mask_bit = i;
|
||||||
aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,
|
/*aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,*/
|
||||||
1<<31|1<<mask_bit, 1<<31|1<<mask_bit);
|
/* (1 << 31)|(1 << mask_bit),*/
|
||||||
|
/* (1 << 31)|(1 << mask_bit));*/
|
||||||
|
|
||||||
to->dev = dev;
|
to->dev = dev;
|
||||||
to->actrl = actrl;
|
to->actrl = actrl;
|
||||||
@@ -136,13 +137,14 @@ static int unregister_toddr_l(struct device *dev, void *data)
|
|||||||
/* disable audio ddr arb */
|
/* disable audio ddr arb */
|
||||||
mask_bit = i;
|
mask_bit = i;
|
||||||
actrl = to->actrl;
|
actrl = to->actrl;
|
||||||
aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,
|
/*aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,*/
|
||||||
1<<mask_bit, 0<<mask_bit);
|
/* 1 << mask_bit, 0 << mask_bit);*/
|
||||||
|
|
||||||
/* no ddr active, disable arb switch */
|
/* no ddr active, disable arb switch */
|
||||||
value = aml_audiobus_read(actrl, EE_AUDIO_ARB_CTRL) & 0x77;
|
value = aml_audiobus_read(actrl, EE_AUDIO_ARB_CTRL) & 0x77;
|
||||||
if (value == 0)
|
/*if (value == 0)*/
|
||||||
aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,
|
/* aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,*/
|
||||||
1<<31, 0<<31);
|
/* 1 << 31, 0 << 31);*/
|
||||||
|
|
||||||
free_irq(to->irq, data);
|
free_irq(to->irq, data);
|
||||||
to->dev = NULL;
|
to->dev = NULL;
|
||||||
@@ -279,7 +281,7 @@ int aml_toddr_set_intrpt(struct toddr *to, unsigned int intrpt)
|
|||||||
reg = calc_toddr_address(EE_AUDIO_TODDR_A_INT_ADDR, reg_base);
|
reg = calc_toddr_address(EE_AUDIO_TODDR_A_INT_ADDR, reg_base);
|
||||||
aml_audiobus_write(actrl, reg, intrpt);
|
aml_audiobus_write(actrl, reg, intrpt);
|
||||||
reg = calc_toddr_address(EE_AUDIO_TODDR_A_CTRL0, reg_base);
|
reg = calc_toddr_address(EE_AUDIO_TODDR_A_CTRL0, reg_base);
|
||||||
aml_audiobus_update_bits(actrl, reg, 0xff<<16, 4<<16);
|
aml_audiobus_update_bits(actrl, reg, 0xff << 16, 0x34 << 16);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -317,7 +319,7 @@ unsigned int aml_toddr_get_addr(struct toddr *to, enum status_sel sel)
|
|||||||
/* reset to default, current write addr */
|
/* reset to default, current write addr */
|
||||||
aml_audiobus_update_bits(actrl, reg_sel,
|
aml_audiobus_update_bits(actrl, reg_sel,
|
||||||
0xf << 8,
|
0xf << 8,
|
||||||
0x0 << 8);
|
0x2 << 8);
|
||||||
|
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
@@ -479,6 +481,40 @@ void aml_toddr_write(struct toddr *to, unsigned int val)
|
|||||||
|
|
||||||
aml_audiobus_write(actrl, reg, val);
|
aml_audiobus_write(actrl, reg, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int aml_toddr_read1(struct toddr *to)
|
||||||
|
{
|
||||||
|
struct aml_audio_controller *actrl = to->actrl;
|
||||||
|
unsigned int reg_base = to->reg_base;
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
reg = calc_toddr_address(EE_AUDIO_TODDR_A_CTRL1, reg_base);
|
||||||
|
|
||||||
|
return aml_audiobus_read(actrl, reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void aml_toddr_write1(struct toddr *to, unsigned int val)
|
||||||
|
{
|
||||||
|
struct aml_audio_controller *actrl = to->actrl;
|
||||||
|
unsigned int reg_base = to->reg_base;
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
reg = calc_toddr_address(EE_AUDIO_TODDR_A_CTRL1, reg_base);
|
||||||
|
|
||||||
|
aml_audiobus_write(actrl, reg, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int aml_toddr_read_status2(struct toddr *to)
|
||||||
|
{
|
||||||
|
struct aml_audio_controller *actrl = to->actrl;
|
||||||
|
unsigned int reg_base = to->reg_base;
|
||||||
|
unsigned int reg;
|
||||||
|
|
||||||
|
reg = calc_toddr_address(EE_AUDIO_TODDR_A_STATUS2, reg_base);
|
||||||
|
|
||||||
|
return aml_audiobus_read(actrl, reg);
|
||||||
|
}
|
||||||
|
|
||||||
/* not for tl1 */
|
/* not for tl1 */
|
||||||
static void aml_toddr_set_resample(struct toddr *to, bool enable)
|
static void aml_toddr_set_resample(struct toddr *to, bool enable)
|
||||||
{
|
{
|
||||||
@@ -838,8 +874,9 @@ static struct frddr *register_frddr_l(struct device *dev,
|
|||||||
|
|
||||||
/* enable audio ddr arb */
|
/* enable audio ddr arb */
|
||||||
mask_bit = i + 4;
|
mask_bit = i + 4;
|
||||||
aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,
|
/*aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,*/
|
||||||
1<<31|1<<mask_bit, 1<<31|1<<mask_bit);
|
/* (1 << 31)|(1 << mask_bit),*/
|
||||||
|
/* (1 << 31)|(1 << mask_bit));*/
|
||||||
|
|
||||||
/* irqs request */
|
/* irqs request */
|
||||||
ret = request_irq(from->irq, handler,
|
ret = request_irq(from->irq, handler,
|
||||||
@@ -879,13 +916,14 @@ static int unregister_frddr_l(struct device *dev, void *data)
|
|||||||
/* disable audio ddr arb */
|
/* disable audio ddr arb */
|
||||||
mask_bit = i + 4;
|
mask_bit = i + 4;
|
||||||
actrl = from->actrl;
|
actrl = from->actrl;
|
||||||
aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,
|
/*aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,*/
|
||||||
1<<mask_bit, 0<<mask_bit);
|
/* 1 << mask_bit, 0 << mask_bit);*/
|
||||||
|
|
||||||
/* no ddr active, disable arb switch */
|
/* no ddr active, disable arb switch */
|
||||||
value = aml_audiobus_read(actrl, EE_AUDIO_ARB_CTRL) & 0x77;
|
value = aml_audiobus_read(actrl, EE_AUDIO_ARB_CTRL) & 0x77;
|
||||||
if (value == 0)
|
/*if (value == 0)*/
|
||||||
aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,
|
/* aml_audiobus_update_bits(actrl, EE_AUDIO_ARB_CTRL,*/
|
||||||
1<<31, 0<<31);
|
/* 1 << 31, 0 << 31);*/
|
||||||
|
|
||||||
free_irq(from->irq, data);
|
free_irq(from->irq, data);
|
||||||
from->dev = NULL;
|
from->dev = NULL;
|
||||||
|
|||||||
@@ -267,6 +267,9 @@ void aml_toddr_set_format(struct toddr *to, struct toddr_fmt *fmt);
|
|||||||
void aml_toddr_insert_chanum(struct toddr *to);
|
void aml_toddr_insert_chanum(struct toddr *to);
|
||||||
unsigned int aml_toddr_read(struct toddr *to);
|
unsigned int aml_toddr_read(struct toddr *to);
|
||||||
void aml_toddr_write(struct toddr *to, unsigned int val);
|
void aml_toddr_write(struct toddr *to, unsigned int val);
|
||||||
|
unsigned int aml_toddr_read1(struct toddr *to);
|
||||||
|
void aml_toddr_write1(struct toddr *to, unsigned int val);
|
||||||
|
unsigned int aml_toddr_read_status2(struct toddr *to);
|
||||||
|
|
||||||
/* resample */
|
/* resample */
|
||||||
void aml_set_resample(enum resample_idx id,
|
void aml_set_resample(enum resample_idx id,
|
||||||
|
|||||||
Reference in New Issue
Block a user