]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
V4L/DVB (9214): si470x: improvement of module device support
authorTobias Lorenz <tobias.lorenz@gmx.net>
Wed, 24 Sep 2008 22:21:50 +0000 (19:21 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 17 Oct 2008 20:21:11 +0000 (17:21 -0300)
This patch improves support for multiple radio devices.

In previous versions all region relevant settings were derived from one
module parameter. As in future versions, the region and other
configuration should be configurable per device from the user space,
this patch already retrieves all relevant information from the actual
device specific settings.

Signed-off-by: Tobias Lorenz <tobias.lorenz@gmx.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/radio/radio-si470x.c

index 3efc08f424fdceb2a1d2dd499e31a67c57d28f3a..2f680268c545080bc82df33d9cd378e143813586 100644 (file)
@@ -667,23 +667,29 @@ static int si470x_get_freq(struct si470x_device *radio, unsigned int *freq)
        int retval;
 
        /* Spacing (kHz) */
-       switch (space) {
+       switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_SPACE) >> 4) {
        /* 0: 200 kHz (USA, Australia) */
-       case 0 : spacing = 0.200 * FREQ_MUL; break;
+       case 0:
+               spacing = 0.200 * FREQ_MUL; break;
        /* 1: 100 kHz (Europe, Japan) */
-       case 1 : spacing = 0.100 * FREQ_MUL; break;
+       case 1:
+               spacing = 0.100 * FREQ_MUL; break;
        /* 2:  50 kHz */
-       default: spacing = 0.050 * FREQ_MUL; break;
+       default:
+               spacing = 0.050 * FREQ_MUL; break;
        };
 
        /* Bottom of Band (MHz) */
-       switch (band) {
+       switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_BAND) >> 6) {
        /* 0: 87.5 - 108 MHz (USA, Europe) */
-       case 0 : band_bottom = 87.5 * FREQ_MUL; break;
+       case 0:
+               band_bottom = 87.5 * FREQ_MUL; break;
        /* 1: 76   - 108 MHz (Japan wide band) */
-       default: band_bottom = 76   * FREQ_MUL; break;
+       default:
+               band_bottom = 76   * FREQ_MUL; break;
        /* 2: 76   -  90 MHz (Japan) */
-       case 2 : band_bottom = 76   * FREQ_MUL; break;
+       case 2:
+               band_bottom = 76   * FREQ_MUL; break;
        };
 
        /* read channel */
@@ -706,23 +712,29 @@ static int si470x_set_freq(struct si470x_device *radio, unsigned int freq)
        unsigned short chan;
 
        /* Spacing (kHz) */
-       switch (space) {
+       switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_SPACE) >> 4) {
        /* 0: 200 kHz (USA, Australia) */
-       case 0 : spacing = 0.200 * FREQ_MUL; break;
+       case 0:
+               spacing = 0.200 * FREQ_MUL; break;
        /* 1: 100 kHz (Europe, Japan) */
-       case 1 : spacing = 0.100 * FREQ_MUL; break;
+       case 1:
+               spacing = 0.100 * FREQ_MUL; break;
        /* 2:  50 kHz */
-       default: spacing = 0.050 * FREQ_MUL; break;
+       default:
+               spacing = 0.050 * FREQ_MUL; break;
        };
 
        /* Bottom of Band (MHz) */
-       switch (band) {
+       switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_BAND) >> 6) {
        /* 0: 87.5 - 108 MHz (USA, Europe) */
-       case 0 : band_bottom = 87.5 * FREQ_MUL; break;
+       case 0:
+               band_bottom = 87.5 * FREQ_MUL; break;
        /* 1: 76   - 108 MHz (Japan wide band) */
-       default: band_bottom = 76   * FREQ_MUL; break;
+       default:
+               band_bottom = 76   * FREQ_MUL; break;
        /* 2: 76   -  90 MHz (Japan) */
-       case 2 : band_bottom = 76   * FREQ_MUL; break;
+       case 2:
+               band_bottom = 76   * FREQ_MUL; break;
        };
 
        /* Chan = [ Freq (Mhz) - Bottom of Band (MHz) ] / Spacing (kHz) */
@@ -1425,7 +1437,8 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv,
                goto done;
 
        strcpy(tuner->name, "FM");
-       switch (band) {
+       /* range limits */
+       switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_BAND) >> 6) {
        /* 0: 87.5 - 108 MHz (USA, Europe, default) */
        default:
                tuner->rangelow  =  87.5 * FREQ_MUL;