On Tue, 30 Jun 2015, Charles Keepax wrote:

> The regmap register definitions have been a source of many small fixes
> as issues are discovered.  As such I made a small automated tool to
> check these definitions. This patch fixes the issues (mostly harmless)
> located by that tool, the issues fall into three catagories:
> 
> 1) Volatile registers that have a default in the defaults table (default
> has been removed from the table since it is redundant)
> 2) Registers that are marked as volatile but unreadable (register has
> been removed from the volatile list since it is obviously not being
> used)
> 3) Registers that arn't readable but have an entry in the defaults
> table (again removed since it is redundant)
> 4) Readable non-volatile registers that are missing a default, these are
> dangerous as they won't get synced during a cache sync. Fortunately,
> most of them seem to be registers that shouldn't be there (for example
> wm5102 had readable registers for DRC2 and ISRC3 which is doesn't have)
> 
> Hopefully another tool will be produced to check the actual default
> values themselves but that is outside the scope of this patch.
> 
> Signed-off-by: Charles Keepax <ckee...@opensource.wolfsonmicro.com>
> ---
>  drivers/mfd/wm5102-tables.c |   47 +-----------------------------------------
>  drivers/mfd/wm5110-tables.c |   10 ---------
>  drivers/mfd/wm8997-tables.c |    6 +---
>  3 files changed, 4 insertions(+), 59 deletions(-)

Applied, thanks.

> diff --git a/drivers/mfd/wm5102-tables.c b/drivers/mfd/wm5102-tables.c
> index aeae6ec..5a5b371 100644
> --- a/drivers/mfd/wm5102-tables.c
> +++ b/drivers/mfd/wm5102-tables.c
> @@ -266,8 +266,6 @@ static const struct reg_default wm5102_reg_default[] = {
>       { 0x00000069, 0x01FF },   /* R105   - Always On Triggers Sequence 
> Select 4 */
>       { 0x0000006A, 0x01FF },   /* R106   - Always On Triggers Sequence 
> Select 5 */
>       { 0x0000006B, 0x01FF },   /* R107   - Always On Triggers Sequence 
> Select 6 */
> -     { 0x0000006E, 0x01FF },   /* R110   - Trigger Sequence Select 32 */
> -     { 0x0000006F, 0x01FF },   /* R111   - Trigger Sequence Select 33 */
>       { 0x00000070, 0x0000 },   /* R112   - Comfort Noise Generator */ 
>       { 0x00000090, 0x0000 },   /* R144   - Haptics Control 1 */ 
>       { 0x00000091, 0x7FFF },   /* R145   - Haptics Control 2 */ 
> @@ -300,7 +298,6 @@ static const struct reg_default wm5102_reg_default[] = {
>       { 0x00000175, 0x0004 },   /* R373   - FLL1 Control 5 */ 
>       { 0x00000176, 0x0000 },   /* R374   - FLL1 Control 6 */ 
>       { 0x00000177, 0x0181 },   /* R375   - FLL1 Loop Filter Test 1 */ 
> -     { 0x00000178, 0x0000 },   /* R376   - FLL1 NCO Test 0 */
>       { 0x00000179, 0x0000 },   /* R377   - FLL1 Control 7 */
>       { 0x00000181, 0x0000 },   /* R385   - FLL1 Synchroniser 1 */ 
>       { 0x00000182, 0x0000 },   /* R386   - FLL1 Synchroniser 2 */ 
> @@ -318,7 +315,6 @@ static const struct reg_default wm5102_reg_default[] = {
>       { 0x00000195, 0x0004 },   /* R405   - FLL2 Control 5 */ 
>       { 0x00000196, 0x0000 },   /* R406   - FLL2 Control 6 */ 
>       { 0x00000197, 0x0000 },   /* R407   - FLL2 Loop Filter Test 1 */ 
> -     { 0x00000198, 0x0000 },   /* R408   - FLL2 NCO Test 0 */
>       { 0x00000199, 0x0000 },   /* R409   - FLL2 Control 7 */
>       { 0x000001A1, 0x0000 },   /* R417   - FLL2 Synchroniser 1 */ 
>       { 0x000001A2, 0x0000 },   /* R418   - FLL2 Synchroniser 2 */ 
> @@ -338,12 +334,9 @@ static const struct reg_default wm5102_reg_default[] = {
>       { 0x0000021A, 0x01A6 },   /* R538   - Mic Bias Ctrl 3 */ 
>       { 0x00000293, 0x0000 },   /* R659   - Accessory Detect Mode 1 */ 
>       { 0x0000029B, 0x0020 },   /* R667   - Headphone Detect 1 */ 
> -     { 0x0000029C, 0x0000 },   /* R668   - Headphone Detect 2 */
> -     { 0x0000029F, 0x0000 },   /* R671   - Headphone Detect Test */
>       { 0x000002A2, 0x0000 },   /* R674   - Micd clamp control */
>       { 0x000002A3, 0x1102 },   /* R675   - Mic Detect 1 */ 
>       { 0x000002A4, 0x009F },   /* R676   - Mic Detect 2 */ 
> -     { 0x000002A5, 0x0000 },   /* R677   - Mic Detect 3 */ 
>       { 0x000002A6, 0x3737 },   /* R678   - Mic Detect Level 1 */
>       { 0x000002A7, 0x372C },   /* R679   - Mic Detect Level 2 */
>       { 0x000002A8, 0x1422 },   /* R680   - Mic Detect Level 3 */
> @@ -887,11 +880,11 @@ static const struct reg_default wm5102_reg_default[] = {
>       { 0x00000D1B, 0xFFFF },   /* R3355  - IRQ2 Status 4 Mask */ 
>       { 0x00000D1C, 0xFFFF },   /* R3356  - IRQ2 Status 5 Mask */ 
>       { 0x00000D1F, 0x0000 },   /* R3359  - IRQ2 Control */ 
> +     { 0x00000D41, 0x0000 },   /* R3393  - ADSP2 IRQ0 */
>       { 0x00000D53, 0xFFFF },   /* R3411  - AOD IRQ Mask IRQ1 */ 
>       { 0x00000D54, 0xFFFF },   /* R3412  - AOD IRQ Mask IRQ2 */ 
>       { 0x00000D56, 0x0000 },   /* R3414  - Jack detect debounce */ 
>       { 0x00000E00, 0x0000 },   /* R3584  - FX_Ctrl1 */ 
> -     { 0x00000E01, 0x0000 },   /* R3585  - FX_Ctrl2 */ 
>       { 0x00000E10, 0x6318 },   /* R3600  - EQ1_1 */ 
>       { 0x00000E11, 0x6300 },   /* R3601  - EQ1_2 */ 
>       { 0x00000E12, 0x0FC8 },   /* R3602  - EQ1_3 */ 
> @@ -991,6 +984,7 @@ static const struct reg_default wm5102_reg_default[] = {
>       { 0x00000ECD, 0x0000 },   /* R3789  - HPLPF4_2 */ 
>       { 0x00000EE0, 0x0000 },   /* R3808  - ASRC_ENABLE */ 
>       { 0x00000EE2, 0x0000 },   /* R3810  - ASRC_RATE1 */ 
> +     { 0x00000EE3, 0x0400 },   /* R3811  - ASRC_RATE2 */
>       { 0x00000EF0, 0x0000 },   /* R3824  - ISRC 1 CTRL 1 */ 
>       { 0x00000EF1, 0x0000 },   /* R3825  - ISRC 1 CTRL 2 */ 
>       { 0x00000EF2, 0x0000 },   /* R3826  - ISRC 1 CTRL 3 */ 
> @@ -998,7 +992,6 @@ static const struct reg_default wm5102_reg_default[] = {
>       { 0x00000EF4, 0x0000 },   /* R3828  - ISRC 2 CTRL 2 */ 
>       { 0x00000EF5, 0x0000 },   /* R3829  - ISRC 2 CTRL 3 */ 
>       { 0x00001100, 0x0010 },   /* R4352  - DSP1 Control 1 */ 
> -     { 0x00001101, 0x0000 },   /* R4353  - DSP1 Clocking 1 */ 
>  };
>  
>  static bool wm5102_readable_register(struct device *dev, unsigned int reg)
> @@ -1008,12 +1001,10 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_DEVICE_REVISION:
>       case ARIZONA_CTRL_IF_SPI_CFG_1:
>       case ARIZONA_CTRL_IF_I2C1_CFG_1:
> -     case ARIZONA_CTRL_IF_STATUS_1:
>       case ARIZONA_WRITE_SEQUENCER_CTRL_0:
>       case ARIZONA_WRITE_SEQUENCER_CTRL_1:
>       case ARIZONA_WRITE_SEQUENCER_CTRL_2:
>       case ARIZONA_WRITE_SEQUENCER_CTRL_3:
> -     case ARIZONA_WRITE_SEQUENCER_PROM:
>       case ARIZONA_TONE_GENERATOR_1:
>       case ARIZONA_TONE_GENERATOR_2:
>       case ARIZONA_TONE_GENERATOR_3:
> @@ -1034,8 +1025,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_4:
>       case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_5:
>       case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_6:
> -     case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_7:
> -     case ARIZONA_ALWAYS_ON_TRIGGERS_SEQUENCE_SELECT_8:
>       case ARIZONA_COMFORT_NOISE_GENERATOR:
>       case ARIZONA_HAPTICS_CONTROL_1:
>       case ARIZONA_HAPTICS_CONTROL_2:
> @@ -1176,7 +1165,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_DAC_DIGITAL_VOLUME_4L:
>       case ARIZONA_OUT_VOLUME_4L:
>       case ARIZONA_NOISE_GATE_SELECT_4L:
> -     case ARIZONA_OUTPUT_PATH_CONFIG_4R:
>       case ARIZONA_DAC_DIGITAL_VOLUME_4R:
>       case ARIZONA_OUT_VOLUME_4R:
>       case ARIZONA_NOISE_GATE_SELECT_4R:
> @@ -1184,7 +1172,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_DAC_DIGITAL_VOLUME_5L:
>       case ARIZONA_DAC_VOLUME_LIMIT_5L:
>       case ARIZONA_NOISE_GATE_SELECT_5L:
> -     case ARIZONA_OUTPUT_PATH_CONFIG_5R:
>       case ARIZONA_DAC_DIGITAL_VOLUME_5R:
>       case ARIZONA_DAC_VOLUME_LIMIT_5R:
>       case ARIZONA_NOISE_GATE_SELECT_5R:
> @@ -1195,8 +1182,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_NOISE_GATE_CONTROL:
>       case ARIZONA_PDM_SPK1_CTRL_1:
>       case ARIZONA_PDM_SPK1_CTRL_2:
> -     case ARIZONA_SPK_CTRL_2:
> -     case ARIZONA_SPK_CTRL_3:
>       case ARIZONA_DAC_COMP_1:
>       case ARIZONA_DAC_COMP_2:
>       case ARIZONA_DAC_COMP_3:
> @@ -1228,7 +1213,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_AIF1_FRAME_CTRL_18:
>       case ARIZONA_AIF1_TX_ENABLES:
>       case ARIZONA_AIF1_RX_ENABLES:
> -     case ARIZONA_AIF1_FORCE_WRITE:
>       case ARIZONA_AIF2_BCLK_CTRL:
>       case ARIZONA_AIF2_TX_PIN_CTRL:
>       case ARIZONA_AIF2_RX_PIN_CTRL:
> @@ -1244,7 +1228,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_AIF2_FRAME_CTRL_12:
>       case ARIZONA_AIF2_TX_ENABLES:
>       case ARIZONA_AIF2_RX_ENABLES:
> -     case ARIZONA_AIF2_FORCE_WRITE:
>       case ARIZONA_AIF3_BCLK_CTRL:
>       case ARIZONA_AIF3_TX_PIN_CTRL:
>       case ARIZONA_AIF3_RX_PIN_CTRL:
> @@ -1260,7 +1243,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_AIF3_FRAME_CTRL_12:
>       case ARIZONA_AIF3_TX_ENABLES:
>       case ARIZONA_AIF3_RX_ENABLES:
> -     case ARIZONA_AIF3_FORCE_WRITE:
>       case ARIZONA_SLIMBUS_FRAMER_REF_GEAR:
>       case ARIZONA_SLIMBUS_RATES_1:
>       case ARIZONA_SLIMBUS_RATES_2:
> @@ -1586,22 +1568,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_DRC1RMIX_INPUT_3_VOLUME:
>       case ARIZONA_DRC1RMIX_INPUT_4_SOURCE:
>       case ARIZONA_DRC1RMIX_INPUT_4_VOLUME:
> -     case ARIZONA_DRC2LMIX_INPUT_1_SOURCE:
> -     case ARIZONA_DRC2LMIX_INPUT_1_VOLUME:
> -     case ARIZONA_DRC2LMIX_INPUT_2_SOURCE:
> -     case ARIZONA_DRC2LMIX_INPUT_2_VOLUME:
> -     case ARIZONA_DRC2LMIX_INPUT_3_SOURCE:
> -     case ARIZONA_DRC2LMIX_INPUT_3_VOLUME:
> -     case ARIZONA_DRC2LMIX_INPUT_4_SOURCE:
> -     case ARIZONA_DRC2LMIX_INPUT_4_VOLUME:
> -     case ARIZONA_DRC2RMIX_INPUT_1_SOURCE:
> -     case ARIZONA_DRC2RMIX_INPUT_1_VOLUME:
> -     case ARIZONA_DRC2RMIX_INPUT_2_SOURCE:
> -     case ARIZONA_DRC2RMIX_INPUT_2_VOLUME:
> -     case ARIZONA_DRC2RMIX_INPUT_3_SOURCE:
> -     case ARIZONA_DRC2RMIX_INPUT_3_VOLUME:
> -     case ARIZONA_DRC2RMIX_INPUT_4_SOURCE:
> -     case ARIZONA_DRC2RMIX_INPUT_4_VOLUME:
>       case ARIZONA_HPLP1MIX_INPUT_1_SOURCE:
>       case ARIZONA_HPLP1MIX_INPUT_1_VOLUME:
>       case ARIZONA_HPLP1MIX_INPUT_2_SOURCE:
> @@ -1810,11 +1776,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_DRC1_CTRL3:
>       case ARIZONA_DRC1_CTRL4:
>       case ARIZONA_DRC1_CTRL5:
> -     case ARIZONA_DRC2_CTRL1:
> -     case ARIZONA_DRC2_CTRL2:
> -     case ARIZONA_DRC2_CTRL3:
> -     case ARIZONA_DRC2_CTRL4:
> -     case ARIZONA_DRC2_CTRL5:
>       case ARIZONA_HPLPF1_1:
>       case ARIZONA_HPLPF1_2:
>       case ARIZONA_HPLPF2_1:
> @@ -1832,9 +1793,6 @@ static bool wm5102_readable_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_ISRC_2_CTRL_1:
>       case ARIZONA_ISRC_2_CTRL_2:
>       case ARIZONA_ISRC_2_CTRL_3:
> -     case ARIZONA_ISRC_3_CTRL_1:
> -     case ARIZONA_ISRC_3_CTRL_2:
> -     case ARIZONA_ISRC_3_CTRL_3:
>       case ARIZONA_DSP1_CONTROL_1:
>       case ARIZONA_DSP1_CLOCKING_1:
>       case ARIZONA_DSP1_STATUS_1:
> @@ -1883,7 +1841,6 @@ static bool wm5102_volatile_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_WRITE_SEQUENCER_CTRL_2:
>       case ARIZONA_WRITE_SEQUENCER_CTRL_3:
>       case ARIZONA_OUTPUT_STATUS_1:
> -     case ARIZONA_RAW_OUTPUT_STATUS_1:
>       case ARIZONA_SLIMBUS_RX_PORT_STATUS:
>       case ARIZONA_SLIMBUS_TX_PORT_STATUS:
>       case ARIZONA_SAMPLE_RATE_1_STATUS:
> diff --git a/drivers/mfd/wm5110-tables.c b/drivers/mfd/wm5110-tables.c
> index 12cad94..4cccfb3 100644
> --- a/drivers/mfd/wm5110-tables.c
> +++ b/drivers/mfd/wm5110-tables.c
> @@ -754,11 +754,9 @@ static const struct reg_default wm5110_reg_default[] = {
>       { 0x0000021A, 0x01A6 },    /* R538   - Mic Bias Ctrl 3 */
>       { 0x00000293, 0x0000 },    /* R659   - Accessory Detect Mode 1 */
>       { 0x0000029B, 0x0028 },    /* R667   - Headphone Detect 1 */
> -     { 0x0000029C, 0x0000 },    /* R668   - Headphone Detect 2 */
>       { 0x000002A2, 0x0000 },    /* R674   - Micd clamp control */
>       { 0x000002A3, 0x1102 },    /* R675   - Mic Detect 1 */
>       { 0x000002A4, 0x009F },    /* R676   - Mic Detect 2 */
> -     { 0x000002A5, 0x0000 },    /* R677   - Mic Detect 3 */
>       { 0x000002A6, 0x3737 },    /* R678   - Mic Detect Level 1 */
>       { 0x000002A7, 0x372C },    /* R679   - Mic Detect Level 2 */
>       { 0x000002A8, 0x1422 },    /* R680   - Mic Detect Level 3 */
> @@ -848,8 +846,6 @@ static const struct reg_default wm5110_reg_default[] = {
>       { 0x00000440, 0x8FFF },    /* R1088  - DRE Enable */
>       { 0x00000450, 0x0000 },    /* R1104  - DAC AEC Control 1 */
>       { 0x00000458, 0x0000 },    /* R1112  - Noise Gate Control */
> -     { 0x00000480, 0x0040 },    /* R1152  - Class W ANC Threshold 1 */
> -     { 0x00000481, 0x0040 },    /* R1153  - Class W ANC Threshold 2 */
>       { 0x00000490, 0x0069 },    /* R1168  - PDM SPK1 CTRL 1 */
>       { 0x00000491, 0x0000 },    /* R1169  - PDM SPK1 CTRL 2 */
>       { 0x00000492, 0x0069 },    /* R1170  - PDM SPK2 CTRL 1 */
> @@ -1508,7 +1504,6 @@ static const struct reg_default wm5110_reg_default[] = {
>       { 0x00000D54, 0xFFFF },    /* R3412  - AOD IRQ Mask IRQ2 */
>       { 0x00000D56, 0x0000 },    /* R3414  - Jack detect debounce */
>       { 0x00000E00, 0x0000 },    /* R3584  - FX_Ctrl1 */
> -     { 0x00000E01, 0x0000 },    /* R3585  - FX_Ctrl2 */
>       { 0x00000E10, 0x6318 },    /* R3600  - EQ1_1 */
>       { 0x00000E11, 0x6300 },    /* R3601  - EQ1_2 */
>       { 0x00000E12, 0x0FC8 },    /* R3602  - EQ1_3 */
> @@ -1625,14 +1620,9 @@ static const struct reg_default wm5110_reg_default[] = 
> {
>       { 0x00000F00, 0x0000 },    /* R3840  - Clock Control */
>       { 0x00000F01, 0x0000 },    /* R3841  - ANC_SRC */
>       { 0x00001100, 0x0010 },    /* R4352  - DSP1 Control 1 */
> -     { 0x00001101, 0x0000 },    /* R4353  - DSP1 Clocking 1 */
>       { 0x00001200, 0x0010 },    /* R4608  - DSP2 Control 1 */
> -     { 0x00001201, 0x0000 },    /* R4609  - DSP2 Clocking 1 */
>       { 0x00001300, 0x0010 },    /* R4864  - DSP3 Control 1 */
> -     { 0x00001301, 0x0000 },    /* R4865  - DSP3 Clocking 1 */
>       { 0x00001400, 0x0010 },    /* R5120  - DSP4 Control 1 */
> -     { 0x00001401, 0x0000 },    /* R5121  - DSP4 Clocking 1 */
> -     { 0x00001404, 0x0000 },    /* R5124  - DSP4 Status 1 */
>  };
>  
>  static bool wm5110_is_rev_b_adsp_memory(unsigned int reg)
> diff --git a/drivers/mfd/wm8997-tables.c b/drivers/mfd/wm8997-tables.c
> index c0c25d75..daa2498 100644
> --- a/drivers/mfd/wm8997-tables.c
> +++ b/drivers/mfd/wm8997-tables.c
> @@ -243,7 +243,6 @@ static const struct reg_default wm8997_reg_default[] = {
>       { 0x0000029B, 0x0020 },    /* R667   - Headphone Detect 1 */
>       { 0x000002A3, 0x1102 },    /* R675   - Mic Detect 1 */
>       { 0x000002A4, 0x009F },    /* R676   - Mic Detect 2 */
> -     { 0x000002A5, 0x0000 },    /* R677   - Mic Detect 3 */
>       { 0x000002C3, 0x0000 },    /* R707   - Mic noise mix control 1 */
>       { 0x000002CB, 0x0000 },    /* R715   - Isolation control */
>       { 0x000002D3, 0x0000 },    /* R723   - Jack detect analogue */
> @@ -684,7 +683,6 @@ static const struct reg_default wm8997_reg_default[] = {
>       { 0x00000D54, 0xFFFF },    /* R3412  - AOD IRQ Mask IRQ2 */
>       { 0x00000D56, 0x0000 },    /* R3414  - Jack detect debounce */
>       { 0x00000E00, 0x0000 },    /* R3584  - FX_Ctrl1 */
> -     { 0x00000E01, 0x0000 },    /* R3585  - FX_Ctrl2 */
>       { 0x00000E10, 0x6318 },    /* R3600  - EQ1_1 */
>       { 0x00000E11, 0x6300 },    /* R3601  - EQ1_2 */
>       { 0x00000E12, 0x0FC8 },    /* R3602  - EQ1_3 */
> @@ -788,8 +786,6 @@ static const struct reg_default wm8997_reg_default[] = {
>       { 0x00000EF3, 0x0000 },    /* R3827  - ISRC 2 CTRL 1 */
>       { 0x00000EF4, 0x0000 },    /* R3828  - ISRC 2 CTRL 2 */
>       { 0x00000EF5, 0x0000 },    /* R3829  - ISRC 2 CTRL 3 */
> -     { 0x00001100, 0x0010 },    /* R4352  - DSP1 Control 1 */
> -     { 0x00001101, 0x0000 },    /* R4353  - DSP1 Clocking 1 */
>  };
>  
>  static bool wm8997_readable_register(struct device *dev, unsigned int reg)
> @@ -1480,6 +1476,8 @@ static bool wm8997_volatile_register(struct device 
> *dev, unsigned int reg)
>       case ARIZONA_SAMPLE_RATE_2_STATUS:
>       case ARIZONA_SAMPLE_RATE_3_STATUS:
>       case ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS:
> +     case ARIZONA_FLL1_NCO_TEST_0:
> +     case ARIZONA_FLL2_NCO_TEST_0:
>       case ARIZONA_MIC_DETECT_3:
>       case ARIZONA_HP_CTRL_1L:
>       case ARIZONA_HP_CTRL_1R:

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to