Hi all,
as the term at university is over I have some time to work more on
sound.c and affected files :)
At the moment I am looking at set_prescaled_volume in sound.c... the
big ifdef suff at the end of
this method.
#if CONFIG_CODEC == MAS3507D
dac_volume(tenthdb2reg(l), tenthdb2reg(r), false);
#elif defined(HAVE_UDA1380) || defined(HAVE_WM8975) || defined(HAVE_WM8758) \
|| defined(HAVE_WM8731) || defined(HAVE_WM8721) || defined(HAVE_WM8751) \
|| defined(HAVE_AS3514) || defined(HAVE_TSC2100)
audiohw_set_master_vol(tenthdb2master(l), tenthdb2master(r));
#if defined(HAVE_WM8975) || defined(HAVE_WM8758) \
|| (defined(HAVE_WM8751) && !defined(MROBE_100)) \
|| defined(HAVE_TSC2100) || defined(HAVE_WM8985)
audiohw_set_lineout_vol(tenthdb2master(0), tenthdb2master(0));
#endif
#elif defined(HAVE_TLV320) || defined(HAVE_WM8978) || defined(HAVE_WM8985)
audiohw_set_headphone_vol(tenthdb2master(l), tenthdb2master(r));
#endif
My goal is it to get rid of it... but there are - I think - two ways to do it.
1) Introduce an #define in each audio driver header... something like
#define audiohw_set_volume(l, r)
audiohw_set_master_vol(tenthdb2master(l), tenthdb2master(r))
Then I would use audiohw_set_volume in sound.c
2) Extend the current audiohw api with methods like
void audiohw_set_master_vol(int l, int r)
void audiohw_set_lineout_vol(int l, int r)
and use master for setting volume for headphones and lineout for
changing vol at lineout.
BUT as far as I can see lineout is not used in rockbox at the moment
(called from /apps )...
....hmmm....
How do we want to handle lineout? Do we really need it?
I would go for 2), as it seems for me the cleanest solution.
thanks,
Christian