diff options
| author | Hans Verkuil <hverkuil@xs4all.nl> | 2006-01-09 12:32:41 -0500 |
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@brturbo.com.br> | 2006-01-09 12:32:41 -0500 |
| commit | d92c20e0a5b560bbe46d7e68bb47df2366cddf8f (patch) | |
| tree | 6fe906f5fb4c7bb3d3581a298ffb2ad864f43545 | |
| parent | fac9e89999a12f378112fe93764b30196bc03f46 (diff) | |
V4L/DVB (3279): Added VIDIOC_QUERYCTRL to cx25840.
- Added VIDIOC_QUERYCTRL
- Removed unnecessary inlines.
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
| -rw-r--r-- | drivers/media/video/cx25840/cx25840-audio.c | 20 | ||||
| -rw-r--r-- | drivers/media/video/cx25840/cx25840-core.c | 102 | ||||
| -rw-r--r-- | drivers/media/video/cx25840/cx25840-firmware.c | 10 | ||||
| -rw-r--r-- | drivers/media/video/cx25840/cx25840-vbi.c | 4 |
4 files changed, 117 insertions, 19 deletions
diff --git a/drivers/media/video/cx25840/cx25840-audio.c b/drivers/media/video/cx25840/cx25840-audio.c index fe6bc411d71f..cb9a7981e408 100644 --- a/drivers/media/video/cx25840/cx25840-audio.c +++ b/drivers/media/video/cx25840/cx25840-audio.c | |||
| @@ -170,7 +170,7 @@ void cx25840_audio_set_path(struct i2c_client *client) | |||
| 170 | set_audclk_freq(client, state->audclk_freq); | 170 | set_audclk_freq(client, state->audclk_freq); |
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | inline static int get_volume(struct i2c_client *client) | 173 | static int get_volume(struct i2c_client *client) |
| 174 | { | 174 | { |
| 175 | /* Volume runs +18dB to -96dB in 1/2dB steps | 175 | /* Volume runs +18dB to -96dB in 1/2dB steps |
| 176 | * change to fit the msp3400 -114dB to +12dB range */ | 176 | * change to fit the msp3400 -114dB to +12dB range */ |
| @@ -181,7 +181,7 @@ inline static int get_volume(struct i2c_client *client) | |||
| 181 | return vol << 9; | 181 | return vol << 9; |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | inline static void set_volume(struct i2c_client *client, int volume) | 184 | static void set_volume(struct i2c_client *client, int volume) |
| 185 | { | 185 | { |
| 186 | /* First convert the volume to msp3400 values (0-127) */ | 186 | /* First convert the volume to msp3400 values (0-127) */ |
| 187 | int vol = volume >> 9; | 187 | int vol = volume >> 9; |
| @@ -198,7 +198,7 @@ inline static void set_volume(struct i2c_client *client, int volume) | |||
| 198 | cx25840_write(client, 0x8d4, 228 - (vol * 2)); | 198 | cx25840_write(client, 0x8d4, 228 - (vol * 2)); |
| 199 | } | 199 | } |
| 200 | 200 | ||
| 201 | inline static int get_bass(struct i2c_client *client) | 201 | static int get_bass(struct i2c_client *client) |
| 202 | { | 202 | { |
| 203 | /* bass is 49 steps +12dB to -12dB */ | 203 | /* bass is 49 steps +12dB to -12dB */ |
| 204 | 204 | ||
| @@ -208,13 +208,13 @@ inline static int get_bass(struct i2c_client *client) | |||
| 208 | return bass; | 208 | return bass; |
| 209 | } | 209 | } |
| 210 | 210 | ||
| 211 | inline static void set_bass(struct i2c_client *client, int bass) | 211 | static void set_bass(struct i2c_client *client, int bass) |
| 212 | { | 212 | { |
| 213 | /* PATH1_EQ_BASS_VOL */ | 213 | /* PATH1_EQ_BASS_VOL */ |
| 214 | cx25840_and_or(client, 0x8d9, ~0x3f, 48 - (bass * 48 / 0xffff)); | 214 | cx25840_and_or(client, 0x8d9, ~0x3f, 48 - (bass * 48 / 0xffff)); |
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | inline static int get_treble(struct i2c_client *client) | 217 | static int get_treble(struct i2c_client *client) |
| 218 | { | 218 | { |
| 219 | /* treble is 49 steps +12dB to -12dB */ | 219 | /* treble is 49 steps +12dB to -12dB */ |
| 220 | 220 | ||
| @@ -224,13 +224,13 @@ inline static int get_treble(struct i2c_client *client) | |||
| 224 | return treble; | 224 | return treble; |
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | inline static void set_treble(struct i2c_client *client, int treble) | 227 | static void set_treble(struct i2c_client *client, int treble) |
| 228 | { | 228 | { |
| 229 | /* PATH1_EQ_TREBLE_VOL */ | 229 | /* PATH1_EQ_TREBLE_VOL */ |
| 230 | cx25840_and_or(client, 0x8db, ~0x3f, 48 - (treble * 48 / 0xffff)); | 230 | cx25840_and_or(client, 0x8db, ~0x3f, 48 - (treble * 48 / 0xffff)); |
| 231 | } | 231 | } |
| 232 | 232 | ||
| 233 | inline static int get_balance(struct i2c_client *client) | 233 | static int get_balance(struct i2c_client *client) |
| 234 | { | 234 | { |
| 235 | /* balance is 7 bit, 0 to -96dB */ | 235 | /* balance is 7 bit, 0 to -96dB */ |
| 236 | 236 | ||
| @@ -244,7 +244,7 @@ inline static int get_balance(struct i2c_client *client) | |||
| 244 | return balance << 8; | 244 | return balance << 8; |
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | inline static void set_balance(struct i2c_client *client, int balance) | 247 | static void set_balance(struct i2c_client *client, int balance) |
| 248 | { | 248 | { |
| 249 | int bal = balance >> 8; | 249 | int bal = balance >> 8; |
| 250 | if (bal > 0x80) { | 250 | if (bal > 0x80) { |
| @@ -260,13 +260,13 @@ inline static void set_balance(struct i2c_client *client, int balance) | |||
| 260 | } | 260 | } |
| 261 | } | 261 | } |
| 262 | 262 | ||
| 263 | inline static int get_mute(struct i2c_client *client) | 263 | static int get_mute(struct i2c_client *client) |
| 264 | { | 264 | { |
| 265 | /* check SRC1_MUTE_EN */ | 265 | /* check SRC1_MUTE_EN */ |
| 266 | return cx25840_read(client, 0x8d3) & 0x2 ? 1 : 0; | 266 | return cx25840_read(client, 0x8d3) & 0x2 ? 1 : 0; |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | inline static void set_mute(struct i2c_client *client, int mute) | 269 | static void set_mute(struct i2c_client *client, int mute) |
| 270 | { | 270 | { |
| 271 | struct cx25840_state *state = i2c_get_clientdata(client); | 271 | struct cx25840_state *state = i2c_get_clientdata(client); |
| 272 | 272 | ||
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c index 2bf057ec626c..d7ece6eecb5c 100644 --- a/drivers/media/video/cx25840/cx25840-core.c +++ b/drivers/media/video/cx25840/cx25840-core.c | |||
| @@ -121,7 +121,7 @@ static void log_status(struct i2c_client *client); | |||
| 121 | 121 | ||
| 122 | /* ----------------------------------------------------------------------- */ | 122 | /* ----------------------------------------------------------------------- */ |
| 123 | 123 | ||
| 124 | static inline void init_dll1(struct i2c_client *client) | 124 | static void init_dll1(struct i2c_client *client) |
| 125 | { | 125 | { |
| 126 | /* This is the Hauppauge sequence used to | 126 | /* This is the Hauppauge sequence used to |
| 127 | * initialize the Delay Lock Loop 1 (ADC DLL). */ | 127 | * initialize the Delay Lock Loop 1 (ADC DLL). */ |
| @@ -135,7 +135,7 @@ static inline void init_dll1(struct i2c_client *client) | |||
| 135 | cx25840_write(client, 0x15b, 0x10); | 135 | cx25840_write(client, 0x15b, 0x10); |
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | static inline void init_dll2(struct i2c_client *client) | 138 | static void init_dll2(struct i2c_client *client) |
| 139 | { | 139 | { |
| 140 | /* This is the Hauppauge sequence used to | 140 | /* This is the Hauppauge sequence used to |
| 141 | * initialize the Delay Lock Loop 2 (ADC DLL). */ | 141 | * initialize the Delay Lock Loop 2 (ADC DLL). */ |
| @@ -562,6 +562,91 @@ static int set_v4lfmt(struct i2c_client *client, struct v4l2_format *fmt) | |||
| 562 | 562 | ||
| 563 | /* ----------------------------------------------------------------------- */ | 563 | /* ----------------------------------------------------------------------- */ |
| 564 | 564 | ||
| 565 | static struct v4l2_queryctrl cx25840_qctrl[] = { | ||
| 566 | { | ||
| 567 | .id = V4L2_CID_BRIGHTNESS, | ||
| 568 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 569 | .name = "Brightness", | ||
| 570 | .minimum = 0, | ||
| 571 | .maximum = 255, | ||
| 572 | .step = 1, | ||
| 573 | .default_value = 128, | ||
| 574 | .flags = 0, | ||
| 575 | }, { | ||
| 576 | .id = V4L2_CID_CONTRAST, | ||
| 577 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 578 | .name = "Contrast", | ||
| 579 | .minimum = 0, | ||
| 580 | .maximum = 255, | ||
| 581 | .step = 1, | ||
| 582 | .default_value = 64, | ||
| 583 | .flags = 0, | ||
| 584 | }, { | ||
| 585 | .id = V4L2_CID_SATURATION, | ||
| 586 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 587 | .name = "Saturation", | ||
| 588 | .minimum = 0, | ||
| 589 | .maximum = 255, | ||
| 590 | .step = 1, | ||
| 591 | .default_value = 64, | ||
| 592 | .flags = 0, | ||
| 593 | }, { | ||
| 594 | .id = V4L2_CID_HUE, | ||
| 595 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 596 | .name = "Hue", | ||
| 597 | .minimum = -128, | ||
| 598 | .maximum = 127, | ||
| 599 | .step = 1, | ||
| 600 | .default_value = 0, | ||
| 601 | .flags = 0, | ||
| 602 | }, { | ||
| 603 | .id = V4L2_CID_AUDIO_VOLUME, | ||
| 604 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 605 | .name = "Volume", | ||
| 606 | .minimum = 0, | ||
| 607 | .maximum = 65535, | ||
| 608 | .step = 65535/100, | ||
| 609 | .default_value = 58880, | ||
| 610 | .flags = 0, | ||
| 611 | }, { | ||
| 612 | .id = V4L2_CID_AUDIO_BALANCE, | ||
| 613 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 614 | .name = "Balance", | ||
| 615 | .minimum = 0, | ||
| 616 | .maximum = 65535, | ||
| 617 | .step = 65535/100, | ||
| 618 | .default_value = 32768, | ||
| 619 | .flags = 0, | ||
| 620 | }, { | ||
| 621 | .id = V4L2_CID_AUDIO_MUTE, | ||
| 622 | .type = V4L2_CTRL_TYPE_BOOLEAN, | ||
| 623 | .name = "Mute", | ||
| 624 | .minimum = 0, | ||
| 625 | .maximum = 1, | ||
| 626 | .step = 1, | ||
| 627 | .default_value = 1, | ||
| 628 | .flags = 0, | ||
| 629 | }, { | ||
| 630 | .id = V4L2_CID_AUDIO_BASS, | ||
| 631 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 632 | .name = "Bass", | ||
| 633 | .minimum = 0, | ||
| 634 | .maximum = 65535, | ||
| 635 | .step = 65535/100, | ||
| 636 | .default_value = 32768, | ||
| 637 | }, { | ||
| 638 | .id = V4L2_CID_AUDIO_TREBLE, | ||
| 639 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
| 640 | .name = "Treble", | ||
| 641 | .minimum = 0, | ||
| 642 | .maximum = 65535, | ||
| 643 | .step = 65535/100, | ||
| 644 | .default_value = 32768, | ||
| 645 | }, | ||
| 646 | }; | ||
| 647 | |||
| 648 | /* ----------------------------------------------------------------------- */ | ||
| 649 | |||
| 565 | static int cx25840_command(struct i2c_client *client, unsigned int cmd, | 650 | static int cx25840_command(struct i2c_client *client, unsigned int cmd, |
| 566 | void *arg) | 651 | void *arg) |
| 567 | { | 652 | { |
| @@ -623,6 +708,19 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 623 | case VIDIOC_S_CTRL: | 708 | case VIDIOC_S_CTRL: |
| 624 | return set_v4lctrl(client, (struct v4l2_control *)arg); | 709 | return set_v4lctrl(client, (struct v4l2_control *)arg); |
| 625 | 710 | ||
| 711 | case VIDIOC_QUERYCTRL: | ||
| 712 | { | ||
| 713 | struct v4l2_queryctrl *qc = arg; | ||
| 714 | int i; | ||
| 715 | |||
| 716 | for (i = 0; i < ARRAY_SIZE(cx25840_qctrl); i++) | ||
| 717 | if (qc->id && qc->id == cx25840_qctrl[i].id) { | ||
| 718 | memcpy(qc, &cx25840_qctrl[i], sizeof(*qc)); | ||
| 719 | return 0; | ||
| 720 | } | ||
| 721 | return -EINVAL; | ||
| 722 | } | ||
| 723 | |||
| 626 | case VIDIOC_G_STD: | 724 | case VIDIOC_G_STD: |
| 627 | *(v4l2_std_id *)arg = cx25840_get_v4lstd(client); | 725 | *(v4l2_std_id *)arg = cx25840_get_v4lstd(client); |
| 628 | break; | 726 | break; |
diff --git a/drivers/media/video/cx25840/cx25840-firmware.c b/drivers/media/video/cx25840/cx25840-firmware.c index 12a73e64f756..e1a7823d82cd 100644 --- a/drivers/media/video/cx25840/cx25840-firmware.c +++ b/drivers/media/video/cx25840/cx25840-firmware.c | |||
| @@ -37,7 +37,7 @@ module_param(firmware, charp, 0444); | |||
| 37 | MODULE_PARM_DESC(fastfw, "Load firmware fast [0=100MHz 1=333MHz (default)]"); | 37 | MODULE_PARM_DESC(fastfw, "Load firmware fast [0=100MHz 1=333MHz (default)]"); |
| 38 | MODULE_PARM_DESC(firmware, "Firmware image [default: " FWFILE "]"); | 38 | MODULE_PARM_DESC(firmware, "Firmware image [default: " FWFILE "]"); |
| 39 | 39 | ||
| 40 | static inline void set_i2c_delay(struct i2c_client *client, int delay) | 40 | static void set_i2c_delay(struct i2c_client *client, int delay) |
| 41 | { | 41 | { |
| 42 | struct i2c_algo_bit_data *algod = client->adapter->algo_data; | 42 | struct i2c_algo_bit_data *algod = client->adapter->algo_data; |
| 43 | 43 | ||
| @@ -51,7 +51,7 @@ static inline void set_i2c_delay(struct i2c_client *client, int delay) | |||
| 51 | } | 51 | } |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | static inline void start_fw_load(struct i2c_client *client) | 54 | static void start_fw_load(struct i2c_client *client) |
| 55 | { | 55 | { |
| 56 | /* DL_ADDR_LB=0 DL_ADDR_HB=0 */ | 56 | /* DL_ADDR_LB=0 DL_ADDR_HB=0 */ |
| 57 | cx25840_write(client, 0x800, 0x00); | 57 | cx25840_write(client, 0x800, 0x00); |
| @@ -65,7 +65,7 @@ static inline void start_fw_load(struct i2c_client *client) | |||
| 65 | set_i2c_delay(client, 3); | 65 | set_i2c_delay(client, 3); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static inline void end_fw_load(struct i2c_client *client) | 68 | static void end_fw_load(struct i2c_client *client) |
| 69 | { | 69 | { |
| 70 | if (fastfw) | 70 | if (fastfw) |
| 71 | set_i2c_delay(client, 10); | 71 | set_i2c_delay(client, 10); |
| @@ -76,7 +76,7 @@ static inline void end_fw_load(struct i2c_client *client) | |||
| 76 | cx25840_write(client, 0x803, 0x03); | 76 | cx25840_write(client, 0x803, 0x03); |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | static inline int check_fw_load(struct i2c_client *client, int size) | 79 | static int check_fw_load(struct i2c_client *client, int size) |
| 80 | { | 80 | { |
| 81 | /* DL_ADDR_HB DL_ADDR_LB */ | 81 | /* DL_ADDR_HB DL_ADDR_LB */ |
| 82 | int s = cx25840_read(client, 0x801) << 8; | 82 | int s = cx25840_read(client, 0x801) << 8; |
| @@ -91,7 +91,7 @@ static inline int check_fw_load(struct i2c_client *client, int size) | |||
| 91 | return 0; | 91 | return 0; |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | static inline int fw_write(struct i2c_client *client, u8 * data, int size) | 94 | static int fw_write(struct i2c_client *client, u8 * data, int size) |
| 95 | { | 95 | { |
| 96 | int sent; | 96 | int sent; |
| 97 | 97 | ||
diff --git a/drivers/media/video/cx25840/cx25840-vbi.c b/drivers/media/video/cx25840/cx25840-vbi.c index 13ba4e15ddea..04d879da7d63 100644 --- a/drivers/media/video/cx25840/cx25840-vbi.c +++ b/drivers/media/video/cx25840/cx25840-vbi.c | |||
| @@ -22,7 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | #include "cx25840.h" | 23 | #include "cx25840.h" |
| 24 | 24 | ||
| 25 | static inline int odd_parity(u8 c) | 25 | static int odd_parity(u8 c) |
| 26 | { | 26 | { |
| 27 | c ^= (c >> 4); | 27 | c ^= (c >> 4); |
| 28 | c ^= (c >> 2); | 28 | c ^= (c >> 2); |
| @@ -31,7 +31,7 @@ static inline int odd_parity(u8 c) | |||
| 31 | return c & 1; | 31 | return c & 1; |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | static inline int decode_vps(u8 * dst, u8 * p) | 34 | static int decode_vps(u8 * dst, u8 * p) |
| 35 | { | 35 | { |
| 36 | static const u8 biphase_tbl[] = { | 36 | static const u8 biphase_tbl[] = { |
| 37 | 0xf0, 0x78, 0x70, 0xf0, 0xb4, 0x3c, 0x34, 0xb4, | 37 | 0xf0, 0x78, 0x70, 0xf0, 0xb4, 0x3c, 0x34, 0xb4, |
