On Tue, 2010-12-21 at 20:38 +0000, Liam Girdwood wrote:
On Tue, 2010-12-21 at 17:16 +0000, Dimitris Papastamos wrote:
The WM8995 is a digital audio hub CODEC designed for smartphones. The current driver supports most of the basic functionality of the WM8995.
Signed-off-by: Dimitris Papastamos dp@opensource.wolfsonmicro.com
+static int wm8995_volatile(unsigned int reg) +{
- if (reg >= WM8995_MAX_REGISTER + 1)
return 1;
return -EINVAL here.
The logic behind this is that out of bounds registers are considered volatile. If I change it to -EINVAL, the behaviour will essentially be the same because in the soc-cache code we use snd_soc_codec_volatile_register() and we only test it for being non-zero. We either need clearer semantics for this function or otherwise it should be fine.
- switch (reg) {
- case WM8995_SOFTWARE_RESET:
- case WM8995_DC_SERVO_READBACK_0:
- case WM8995_INTERRUPT_STATUS_1:
- case WM8995_INTERRUPT_STATUS_2:
- case WM8995_INTERRUPT_STATUS_1_MASK:
- case WM8995_INTERRUPT_STATUS_2_MASK:
- case WM8995_INTERRUPT_CONTROL:
- case WM8995_ACCESSORY_DETECT_MODE1:
- case WM8995_ACCESSORY_DETECT_MODE2:
- case WM8995_HEADPHONE_DETECT1:
- case WM8995_HEADPHONE_DETECT2:
return 1;
- }
- return 0;
+}
+/*
- R1 (0x01) - Power Management (1)
- */
+#define WM8995_MICB2_ENA 0x0200 /* MICB2_ENA */ +#define WM8995_MICB2_ENA_MASK 0x0200 /* MICB2_ENA */ +#define WM8995_MICB2_ENA_SHIFT 9 /* MICB2_ENA */ +#define WM8995_MICB2_ENA_WIDTH 1 /* MICB2_ENA */ +#define WM8995_MICB1_ENA 0x0100 /* MICB1_ENA */ +#define WM8995_MICB1_ENA_MASK 0x0100 /* MICB1_ENA */ +#define WM8995_MICB1_ENA_SHIFT 8 /* MICB1_ENA */ +#define WM8995_MICB1_ENA_WIDTH 1 /* MICB1_ENA */ +#define WM8995_HPOUT2L_ENA 0x0080 /* HPOUT2L_ENA */ +#define WM8995_HPOUT2L_ENA_MASK 0x0080 /* HPOUT2L_ENA */ +#define WM8995_HPOUT2L_ENA_SHIFT 7 /* HPOUT2L_ENA */ +#define WM8995_HPOUT2L_ENA_WIDTH 1 /* HPOUT2L_ENA */ +#define WM8995_HPOUT2R_ENA 0x0040 /* HPOUT2R_ENA */ +#define WM8995_HPOUT2R_ENA_MASK 0x0040 /* HPOUT2R_ENA */ +#define WM8995_HPOUT2R_ENA_SHIFT 6 /* HPOUT2R_ENA */ +#define WM8995_HPOUT2R_ENA_WIDTH 1 /* HPOUT2R_ENA */ +#define WM8995_HPOUT1L_ENA 0x0020 /* HPOUT1L_ENA */ +#define WM8995_HPOUT1L_ENA_MASK 0x0020 /* HPOUT1L_ENA */ +#define WM8995_HPOUT1L_ENA_SHIFT 5 /* HPOUT1L_ENA */ +#define WM8995_HPOUT1L_ENA_WIDTH 1 /* HPOUT1L_ENA */ +#define WM8995_HPOUT1R_ENA 0x0010 /* HPOUT1R_ENA */ +#define WM8995_HPOUT1R_ENA_MASK 0x0010 /* HPOUT1R_ENA */ +#define WM8995_HPOUT1R_ENA_SHIFT 4 /* HPOUT1R_ENA */ +#define WM8995_HPOUT1R_ENA_WIDTH 1 /* HPOUT1R_ENA */ +#define WM8995_BG_ENA 0x0001 /* BG_ENA */ +#define WM8995_BG_ENA_MASK 0x0001 /* BG_ENA */ +#define WM8995_BG_ENA_SHIFT 0 /* BG_ENA */ +#define WM8995_BG_ENA_WIDTH 1 /* BG_ENA */
It looks like all the register bits have macros but some driver functions are still using magic numbers for bits instead of the macros.
I've found one call to dc_servo_cmd() using a magic number. The dapm widgets and the kcontrols don't generally use the macros since the lines become very long.
Thanks, Dimitris