Skip to content

Commit

Permalink
Revert "Faux Sound Control: update to version to 3.6"
Browse files Browse the repository at this point in the history
This reverts commit 9063d5f.
  • Loading branch information
imoseyon committed Oct 1, 2014
1 parent 2c390a4 commit 4bb4f5d
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 347 deletions.
16 changes: 0 additions & 16 deletions drivers/mfd/wcd9xxx-core.c
Expand Up @@ -119,22 +119,6 @@ int wcd9xxx_reg_read(
}
EXPORT_SYMBOL(wcd9xxx_reg_read);

#ifdef CONFIG_SOUND_CONTROL_HAX_3_GPL
int wcd9xxx_reg_read_safe(struct wcd9xxx *wcd9xxx, unsigned short reg)
{
u8 val;
int ret;

ret = wcd9xxx_read(wcd9xxx, reg, 1, &val, false);

if (ret < 0)
return ret;
else
return val;
}
EXPORT_SYMBOL_GPL(wcd9xxx_reg_read_safe);
#endif

static int wcd9xxx_write(struct wcd9xxx *wcd9xxx, unsigned short reg,
int bytes, void *src, bool interface_reg)
{
Expand Down
3 changes: 0 additions & 3 deletions include/linux/mfd/wcd9xxx/core.h
Expand Up @@ -195,9 +195,6 @@ struct wcd9xxx {
};

int wcd9xxx_interface_reg_read(struct wcd9xxx *wcd9xxx, unsigned short reg);
#ifdef CONFIG_SOUND_CONTROL_HAX_3_GPL
int wcd9xxx_reg_read_safe(struct wcd9xxx *wcd9xxx, unsigned short reg);
#endif
int wcd9xxx_interface_reg_write(struct wcd9xxx *wcd9xxx, unsigned short reg,
u8 val);
int wcd9xxx_get_logical_addresses(u8 *pgd_la, u8 *inf_la);
Expand Down
283 changes: 7 additions & 276 deletions sound/soc/codecs/sound_control_3_gpl.c
Expand Up @@ -19,169 +19,17 @@
#include <linux/kobject.h>
#include <linux/sysfs.h>
#include <linux/kallsyms.h>
#include <linux/mfd/wcd9xxx/core.h>
#include <linux/mfd/wcd9xxx/wcd9320_registers.h>

#define SOUND_CONTROL_MAJOR_VERSION 3
#define SOUND_CONTROL_MINOR_VERSION 6
#define SOUND_CONTROL_MINOR_VERSION 0

extern struct snd_soc_codec *fauxsound_codec_ptr;
extern int wcd9xxx_hw_revision;

static int snd_ctrl_locked = 0;
static int snd_rec_ctrl_locked = 0;

unsigned int taiko_read(struct snd_soc_codec *codec, unsigned int reg);
int taiko_write(struct snd_soc_codec *codec, unsigned int reg,
unsigned int value);

#define REG_SZ 25
static unsigned int cached_regs[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0 };

static unsigned int *cache_select(unsigned int reg)
{
unsigned int *out = NULL;

switch (reg) {
case TAIKO_A_RX_HPH_L_GAIN:
out = &cached_regs[0];
break;
case TAIKO_A_RX_HPH_R_GAIN:
out = &cached_regs[1];
break;
case TAIKO_A_CDC_RX1_VOL_CTL_B2_CTL:
out = &cached_regs[4];
break;
case TAIKO_A_CDC_RX2_VOL_CTL_B2_CTL:
out = &cached_regs[5];
break;
case TAIKO_A_CDC_RX3_VOL_CTL_B2_CTL:
out = &cached_regs[6];
break;
case TAIKO_A_CDC_RX4_VOL_CTL_B2_CTL:
out = &cached_regs[7];
break;
case TAIKO_A_CDC_RX5_VOL_CTL_B2_CTL:
out = &cached_regs[8];
break;
case TAIKO_A_CDC_RX6_VOL_CTL_B2_CTL:
out = &cached_regs[9];
break;
case TAIKO_A_CDC_RX7_VOL_CTL_B2_CTL:
out = &cached_regs[10];
break;
case TAIKO_A_CDC_TX1_VOL_CTL_GAIN:
out = &cached_regs[11];
break;
case TAIKO_A_CDC_TX2_VOL_CTL_GAIN:
out = &cached_regs[12];
break;
case TAIKO_A_CDC_TX3_VOL_CTL_GAIN:
out = &cached_regs[13];
break;
case TAIKO_A_CDC_TX4_VOL_CTL_GAIN:
out = &cached_regs[14];
break;
case TAIKO_A_CDC_TX5_VOL_CTL_GAIN:
out = &cached_regs[15];
break;
case TAIKO_A_CDC_TX6_VOL_CTL_GAIN:
out = &cached_regs[16];
break;
case TAIKO_A_CDC_TX7_VOL_CTL_GAIN:
out = &cached_regs[17];
break;
case TAIKO_A_CDC_TX8_VOL_CTL_GAIN:
out = &cached_regs[18];
break;
case TAIKO_A_CDC_TX9_VOL_CTL_GAIN:
out = &cached_regs[19];
break;
case TAIKO_A_CDC_TX10_VOL_CTL_GAIN:
out = &cached_regs[20];
break;
case TAIKO_A_RX_LINE_1_GAIN:
out = &cached_regs[21];
break;
case TAIKO_A_RX_LINE_2_GAIN:
out = &cached_regs[22];
break;
case TAIKO_A_RX_LINE_3_GAIN:
out = &cached_regs[23];
break;
case TAIKO_A_RX_LINE_4_GAIN:
out = &cached_regs[24];
break;
}
return out;
}

void snd_hax_cache_write(unsigned int reg, unsigned int value)
{
unsigned int *tmp = cache_select(reg);

if (tmp != NULL)
*tmp = value;
}
EXPORT_SYMBOL(snd_hax_cache_write);

unsigned int snd_hax_cache_read(unsigned int reg)
{
if (cache_select(reg) != NULL)
return *cache_select(reg);
else
return -1;
}
EXPORT_SYMBOL(snd_hax_cache_read);

int snd_hax_reg_access(unsigned int reg)
{
int ret = 1;

switch (reg) {
case TAIKO_A_RX_HPH_L_GAIN:
case TAIKO_A_RX_HPH_R_GAIN:
case TAIKO_A_RX_HPH_L_STATUS:
case TAIKO_A_RX_HPH_R_STATUS:
if (snd_ctrl_locked > 1)
ret = 0;
break;
case TAIKO_A_CDC_RX1_VOL_CTL_B2_CTL:
case TAIKO_A_CDC_RX2_VOL_CTL_B2_CTL:
case TAIKO_A_CDC_RX3_VOL_CTL_B2_CTL:
case TAIKO_A_CDC_RX4_VOL_CTL_B2_CTL:
case TAIKO_A_CDC_RX5_VOL_CTL_B2_CTL:
case TAIKO_A_CDC_RX6_VOL_CTL_B2_CTL:
case TAIKO_A_CDC_RX7_VOL_CTL_B2_CTL:
case TAIKO_A_RX_LINE_1_GAIN:
case TAIKO_A_RX_LINE_2_GAIN:
case TAIKO_A_RX_LINE_3_GAIN:
case TAIKO_A_RX_LINE_4_GAIN:
if (snd_ctrl_locked > 0)
ret = 0;
break;
case TAIKO_A_CDC_TX1_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX2_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX3_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX4_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX5_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX6_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX7_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX8_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX9_VOL_CTL_GAIN:
case TAIKO_A_CDC_TX10_VOL_CTL_GAIN:
if (snd_rec_ctrl_locked > 0)
ret = 0;
break;
default:
break;
}
return ret;
}
EXPORT_SYMBOL(snd_hax_reg_access);

static bool calc_checksum(unsigned int a, unsigned int b, unsigned int c)
{
unsigned char chksum = 0;
Expand All @@ -198,7 +46,7 @@ static bool calc_checksum(unsigned int a, unsigned int b, unsigned int c)
static ssize_t cam_mic_gain_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%u\n",
return sprintf(buf, "%u",
taiko_read(fauxsound_codec_ptr,
TAIKO_A_CDC_TX6_VOL_CTL_GAIN));

Expand All @@ -221,7 +69,7 @@ static ssize_t cam_mic_gain_store(struct kobject *kobj,
static ssize_t mic_gain_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%u\n",
return sprintf(buf, "%u",
taiko_read(fauxsound_codec_ptr,
TAIKO_A_CDC_TX7_VOL_CTL_GAIN));
}
Expand All @@ -244,7 +92,7 @@ static ssize_t mic_gain_store(struct kobject *kobj,
static ssize_t speaker_gain_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%u %u\n",
return sprintf(buf, "%u %u",
taiko_read(fauxsound_codec_ptr,
TAIKO_A_CDC_RX7_VOL_CTL_B2_CTL),
taiko_read(fauxsound_codec_ptr,
Expand All @@ -271,7 +119,7 @@ static ssize_t speaker_gain_store(struct kobject *kobj,
static ssize_t headphone_gain_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%u %u\n",
return sprintf(buf, "%u %u",
taiko_read(fauxsound_codec_ptr,
TAIKO_A_CDC_RX1_VOL_CTL_B2_CTL),
taiko_read(fauxsound_codec_ptr,
Expand All @@ -297,7 +145,7 @@ static ssize_t headphone_gain_store(struct kobject *kobj,
static ssize_t headphone_pa_gain_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%u %u\n",
return sprintf(buf, "%u %u",
taiko_read(fauxsound_codec_ptr, TAIKO_A_RX_HPH_L_GAIN),
taiko_read(fauxsound_codec_ptr, TAIKO_A_RX_HPH_R_GAIN));
}
Expand Down Expand Up @@ -331,107 +179,13 @@ static ssize_t headphone_pa_gain_store(struct kobject *kobj,
return count;
}

static unsigned int selected_reg = 0xdeadbeef;

static ssize_t sound_reg_select_store(struct kobject *kobj,
struct kobj_attribute *attr, const char *buf, size_t count)
{
sscanf(buf, "%u", &selected_reg);

return count;
}

static ssize_t sound_reg_read_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
if (selected_reg == 0xdeadbeef)
return -1;
else
return sprintf(buf, "%u\n",
taiko_read(fauxsound_codec_ptr, selected_reg));
}

static ssize_t sound_reg_write_store(struct kobject *kobj,
struct kobj_attribute *attr, const char *buf, size_t count)
{
unsigned int out, chksum;

sscanf(buf, "%u %u", &out, &chksum);
if (calc_checksum(out, 0, chksum)) {
if (selected_reg != 0xdeadbeef)
taiko_write(fauxsound_codec_ptr, selected_reg, out);
}
return count;
}

static ssize_t sound_control_hw_revision_show (struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "hw_revision: %i\n", wcd9xxx_hw_revision);
}

static ssize_t sound_control_version_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
static ssize_t sound_control_version_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "version: %u.%u\n",
SOUND_CONTROL_MAJOR_VERSION,
SOUND_CONTROL_MINOR_VERSION);
}

static ssize_t sound_control_locked_store(struct kobject *kobj,
struct kobj_attribute *attr, const char *buf, size_t count)
{
int inp;

sscanf(buf, "%d", &inp);

snd_ctrl_locked = inp;

return count;
}

static ssize_t sound_control_locked_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%d\n", snd_ctrl_locked);
}

static ssize_t sound_control_rec_locked_store(struct kobject *kobj,
struct kobj_attribute *attr, const char *buf, size_t count)
{
int inp;

sscanf(buf, "%d", &inp);

snd_rec_ctrl_locked = inp;

return count;
}

static ssize_t sound_control_rec_locked_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return sprintf(buf, "%d\n", snd_rec_ctrl_locked);
}

static struct kobj_attribute sound_reg_sel_attribute =
__ATTR(sound_reg_sel,
0222,
NULL,
sound_reg_select_store);

static struct kobj_attribute sound_reg_read_attribute =
__ATTR(sound_reg_read,
0444,
sound_reg_read_show,
NULL);

static struct kobj_attribute sound_reg_write_attribute =
__ATTR(sound_reg_write,
0222,
NULL,
sound_reg_write_store);

static struct kobj_attribute cam_mic_gain_attribute =
__ATTR(gpl_cam_mic_gain,
0666,
Expand Down Expand Up @@ -462,41 +216,18 @@ static struct kobj_attribute headphone_pa_gain_attribute =
headphone_pa_gain_show,
headphone_pa_gain_store);

static struct kobj_attribute sound_control_locked_attribute =
__ATTR(gpl_sound_control_locked,
0666,
sound_control_locked_show,
sound_control_locked_store);

static struct kobj_attribute sound_control_rec_locked_attribute =
__ATTR(gpl_sound_control_rec_locked,
0666,
sound_control_rec_locked_show,
sound_control_rec_locked_store);

static struct kobj_attribute sound_control_version_attribute =
__ATTR(gpl_sound_control_version,
0444,
sound_control_version_show, NULL);

static struct kobj_attribute sound_hw_revision_attribute =
__ATTR(gpl_sound_control_hw_revision,
0444,
sound_control_hw_revision_show, NULL);

static struct attribute *sound_control_attrs[] =
{
&cam_mic_gain_attribute.attr,
&mic_gain_attribute.attr,
&speaker_gain_attribute.attr,
&headphone_gain_attribute.attr,
&headphone_pa_gain_attribute.attr,
&sound_control_locked_attribute.attr,
&sound_control_rec_locked_attribute.attr,
&sound_reg_sel_attribute.attr,
&sound_reg_read_attribute.attr,
&sound_reg_write_attribute.attr,
&sound_hw_revision_attribute.attr,
&sound_control_version_attribute.attr,
NULL,
};
Expand Down

0 comments on commit 4bb4f5d

Please sign in to comment.