mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
V4L/DVB (6459): cx25840: convert to bus-based I2C API
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
e8e6b99184
commit
1a39275a3f
@ -37,6 +37,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-chip-ident.h>
|
||||
#include <media/v4l2-i2c-drv-legacy.h>
|
||||
#include <media/cx25840.h>
|
||||
|
||||
#include "cx25840-core.h"
|
||||
@ -122,8 +123,6 @@ int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask,
|
||||
|
||||
static int set_input(struct i2c_client *client, enum cx25840_video_input vid_input,
|
||||
enum cx25840_audio_input aud_input);
|
||||
static void log_audio_status(struct i2c_client *client);
|
||||
static void log_video_status(struct i2c_client *client);
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
@ -641,6 +640,200 @@ static int set_v4lfmt(struct i2c_client *client, struct v4l2_format *fmt)
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static void log_video_status(struct i2c_client *client)
|
||||
{
|
||||
static const char *const fmt_strs[] = {
|
||||
"0x0",
|
||||
"NTSC-M", "NTSC-J", "NTSC-4.43",
|
||||
"PAL-BDGHI", "PAL-M", "PAL-N", "PAL-Nc", "PAL-60",
|
||||
"0x9", "0xA", "0xB",
|
||||
"SECAM",
|
||||
"0xD", "0xE", "0xF"
|
||||
};
|
||||
|
||||
struct cx25840_state *state = i2c_get_clientdata(client);
|
||||
u8 vidfmt_sel = cx25840_read(client, 0x400) & 0xf;
|
||||
u8 gen_stat1 = cx25840_read(client, 0x40d);
|
||||
u8 gen_stat2 = cx25840_read(client, 0x40e);
|
||||
int vid_input = state->vid_input;
|
||||
|
||||
v4l_info(client, "Video signal: %spresent\n",
|
||||
(gen_stat2 & 0x20) ? "" : "not ");
|
||||
v4l_info(client, "Detected format: %s\n",
|
||||
fmt_strs[gen_stat1 & 0xf]);
|
||||
|
||||
v4l_info(client, "Specified standard: %s\n",
|
||||
vidfmt_sel ? fmt_strs[vidfmt_sel] : "automatic detection");
|
||||
|
||||
if (vid_input >= CX25840_COMPOSITE1 &&
|
||||
vid_input <= CX25840_COMPOSITE8) {
|
||||
v4l_info(client, "Specified video input: Composite %d\n",
|
||||
vid_input - CX25840_COMPOSITE1 + 1);
|
||||
} else {
|
||||
v4l_info(client, "Specified video input: S-Video (Luma In%d, Chroma In%d)\n",
|
||||
(vid_input & 0xf0) >> 4, (vid_input & 0xf00) >> 8);
|
||||
}
|
||||
|
||||
v4l_info(client, "Specified audioclock freq: %d Hz\n", state->audclk_freq);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static void log_audio_status(struct i2c_client *client)
|
||||
{
|
||||
struct cx25840_state *state = i2c_get_clientdata(client);
|
||||
u8 download_ctl = cx25840_read(client, 0x803);
|
||||
u8 mod_det_stat0 = cx25840_read(client, 0x804);
|
||||
u8 mod_det_stat1 = cx25840_read(client, 0x805);
|
||||
u8 audio_config = cx25840_read(client, 0x808);
|
||||
u8 pref_mode = cx25840_read(client, 0x809);
|
||||
u8 afc0 = cx25840_read(client, 0x80b);
|
||||
u8 mute_ctl = cx25840_read(client, 0x8d3);
|
||||
int aud_input = state->aud_input;
|
||||
char *p;
|
||||
|
||||
switch (mod_det_stat0) {
|
||||
case 0x00: p = "mono"; break;
|
||||
case 0x01: p = "stereo"; break;
|
||||
case 0x02: p = "dual"; break;
|
||||
case 0x04: p = "tri"; break;
|
||||
case 0x10: p = "mono with SAP"; break;
|
||||
case 0x11: p = "stereo with SAP"; break;
|
||||
case 0x12: p = "dual with SAP"; break;
|
||||
case 0x14: p = "tri with SAP"; break;
|
||||
case 0xfe: p = "forced mode"; break;
|
||||
default: p = "not defined";
|
||||
}
|
||||
v4l_info(client, "Detected audio mode: %s\n", p);
|
||||
|
||||
switch (mod_det_stat1) {
|
||||
case 0x00: p = "not defined"; break;
|
||||
case 0x01: p = "EIAJ"; break;
|
||||
case 0x02: p = "A2-M"; break;
|
||||
case 0x03: p = "A2-BG"; break;
|
||||
case 0x04: p = "A2-DK1"; break;
|
||||
case 0x05: p = "A2-DK2"; break;
|
||||
case 0x06: p = "A2-DK3"; break;
|
||||
case 0x07: p = "A1 (6.0 MHz FM Mono)"; break;
|
||||
case 0x08: p = "AM-L"; break;
|
||||
case 0x09: p = "NICAM-BG"; break;
|
||||
case 0x0a: p = "NICAM-DK"; break;
|
||||
case 0x0b: p = "NICAM-I"; break;
|
||||
case 0x0c: p = "NICAM-L"; break;
|
||||
case 0x0d: p = "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break;
|
||||
case 0x0e: p = "IF FM Radio"; break;
|
||||
case 0x0f: p = "BTSC"; break;
|
||||
case 0x10: p = "high-deviation FM"; break;
|
||||
case 0x11: p = "very high-deviation FM"; break;
|
||||
case 0xfd: p = "unknown audio standard"; break;
|
||||
case 0xfe: p = "forced audio standard"; break;
|
||||
case 0xff: p = "no detected audio standard"; break;
|
||||
default: p = "not defined";
|
||||
}
|
||||
v4l_info(client, "Detected audio standard: %s\n", p);
|
||||
v4l_info(client, "Audio muted: %s\n",
|
||||
(state->unmute_volume >= 0) ? "yes" : "no");
|
||||
v4l_info(client, "Audio microcontroller: %s\n",
|
||||
(download_ctl & 0x10) ?
|
||||
((mute_ctl & 0x2) ? "detecting" : "running") : "stopped");
|
||||
|
||||
switch (audio_config >> 4) {
|
||||
case 0x00: p = "undefined"; break;
|
||||
case 0x01: p = "BTSC"; break;
|
||||
case 0x02: p = "EIAJ"; break;
|
||||
case 0x03: p = "A2-M"; break;
|
||||
case 0x04: p = "A2-BG"; break;
|
||||
case 0x05: p = "A2-DK1"; break;
|
||||
case 0x06: p = "A2-DK2"; break;
|
||||
case 0x07: p = "A2-DK3"; break;
|
||||
case 0x08: p = "A1 (6.0 MHz FM Mono)"; break;
|
||||
case 0x09: p = "AM-L"; break;
|
||||
case 0x0a: p = "NICAM-BG"; break;
|
||||
case 0x0b: p = "NICAM-DK"; break;
|
||||
case 0x0c: p = "NICAM-I"; break;
|
||||
case 0x0d: p = "NICAM-L"; break;
|
||||
case 0x0e: p = "FM radio"; break;
|
||||
case 0x0f: p = "automatic detection"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Configured audio standard: %s\n", p);
|
||||
|
||||
if ((audio_config >> 4) < 0xF) {
|
||||
switch (audio_config & 0xF) {
|
||||
case 0x00: p = "MONO1 (LANGUAGE A/Mono L+R channel for BTSC, EIAJ, A2)"; break;
|
||||
case 0x01: p = "MONO2 (LANGUAGE B)"; break;
|
||||
case 0x02: p = "MONO3 (STEREO forced MONO)"; break;
|
||||
case 0x03: p = "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break;
|
||||
case 0x04: p = "STEREO"; break;
|
||||
case 0x05: p = "DUAL1 (AB)"; break;
|
||||
case 0x06: p = "DUAL2 (AC) (FM)"; break;
|
||||
case 0x07: p = "DUAL3 (BC) (FM)"; break;
|
||||
case 0x08: p = "DUAL4 (AC) (AM)"; break;
|
||||
case 0x09: p = "DUAL5 (BC) (AM)"; break;
|
||||
case 0x0a: p = "SAP"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Configured audio mode: %s\n", p);
|
||||
} else {
|
||||
switch (audio_config & 0xF) {
|
||||
case 0x00: p = "BG"; break;
|
||||
case 0x01: p = "DK1"; break;
|
||||
case 0x02: p = "DK2"; break;
|
||||
case 0x03: p = "DK3"; break;
|
||||
case 0x04: p = "I"; break;
|
||||
case 0x05: p = "L"; break;
|
||||
case 0x06: p = "BTSC"; break;
|
||||
case 0x07: p = "EIAJ"; break;
|
||||
case 0x08: p = "A2-M"; break;
|
||||
case 0x09: p = "FM Radio"; break;
|
||||
case 0x0f: p = "automatic standard and mode detection"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Configured audio system: %s\n", p);
|
||||
}
|
||||
|
||||
if (aud_input) {
|
||||
v4l_info(client, "Specified audio input: Tuner (In%d)\n", aud_input);
|
||||
} else {
|
||||
v4l_info(client, "Specified audio input: External\n");
|
||||
}
|
||||
|
||||
switch (pref_mode & 0xf) {
|
||||
case 0: p = "mono/language A"; break;
|
||||
case 1: p = "language B"; break;
|
||||
case 2: p = "language C"; break;
|
||||
case 3: p = "analog fallback"; break;
|
||||
case 4: p = "stereo"; break;
|
||||
case 5: p = "language AC"; break;
|
||||
case 6: p = "language BC"; break;
|
||||
case 7: p = "language AB"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Preferred audio mode: %s\n", p);
|
||||
|
||||
if ((audio_config & 0xf) == 0xf) {
|
||||
switch ((afc0 >> 3) & 0x3) {
|
||||
case 0: p = "system DK"; break;
|
||||
case 1: p = "system L"; break;
|
||||
case 2: p = "autodetect"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Selected 65 MHz format: %s\n", p);
|
||||
|
||||
switch (afc0 & 0x7) {
|
||||
case 0: p = "chroma"; break;
|
||||
case 1: p = "BTSC"; break;
|
||||
case 2: p = "EIAJ"; break;
|
||||
case 3: p = "A2-M"; break;
|
||||
case 4: p = "autodetect"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Selected 45 MHz format: %s\n", p);
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static int cx25840_command(struct i2c_client *client, unsigned int cmd,
|
||||
void *arg)
|
||||
{
|
||||
@ -879,31 +1072,12 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd,
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static struct i2c_driver i2c_driver_cx25840;
|
||||
|
||||
static int cx25840_detect_client(struct i2c_adapter *adapter, int address,
|
||||
int kind)
|
||||
static int cx25840_probe(struct i2c_client *client)
|
||||
{
|
||||
struct i2c_client *client;
|
||||
struct cx25840_state *state;
|
||||
u32 id;
|
||||
u16 device_id;
|
||||
|
||||
/* Check if the adapter supports the needed features
|
||||
* Not until kernel version 2.6.11 did the bit-algo
|
||||
* correctly report that it would do an I2C-level xfer */
|
||||
if (!i2c_check_functionality(adapter, I2C_FUNC_I2C))
|
||||
return 0;
|
||||
|
||||
client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
|
||||
if (client == 0)
|
||||
return -ENOMEM;
|
||||
|
||||
client->addr = address;
|
||||
client->adapter = adapter;
|
||||
client->driver = &i2c_driver_cx25840;
|
||||
snprintf(client->name, sizeof(client->name) - 1, "cx25840");
|
||||
|
||||
v4l_dbg(1, cx25840_debug, client, "detecting cx25840 client on address 0x%x\n", client->addr << 1);
|
||||
|
||||
device_id = cx25840_read(client, 0x101) << 8;
|
||||
@ -919,13 +1093,11 @@ static int cx25840_detect_client(struct i2c_adapter *adapter, int address,
|
||||
}
|
||||
else {
|
||||
v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
|
||||
kfree(client);
|
||||
return 0;
|
||||
}
|
||||
|
||||
state = kzalloc(sizeof(struct cx25840_state), GFP_KERNEL);
|
||||
if (state == NULL) {
|
||||
kfree(client);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@ -948,251 +1120,19 @@ static int cx25840_detect_client(struct i2c_adapter *adapter, int address,
|
||||
state->vbi_line_offset = 8;
|
||||
state->id = id;
|
||||
state->rev = device_id;
|
||||
|
||||
i2c_attach_client(client);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx25840_attach_adapter(struct i2c_adapter *adapter)
|
||||
static int cx25840_remove(struct i2c_client *client)
|
||||
{
|
||||
if (adapter->class & I2C_CLASS_TV_ANALOG)
|
||||
return i2c_probe(adapter, &addr_data, &cx25840_detect_client);
|
||||
kfree(i2c_get_clientdata(client));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx25840_detach_client(struct i2c_client *client)
|
||||
{
|
||||
struct cx25840_state *state = i2c_get_clientdata(client);
|
||||
int err;
|
||||
|
||||
err = i2c_detach_client(client);
|
||||
if (err) {
|
||||
return err;
|
||||
}
|
||||
|
||||
kfree(state);
|
||||
kfree(client);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static struct i2c_driver i2c_driver_cx25840 = {
|
||||
.driver = {
|
||||
.name = "cx25840",
|
||||
},
|
||||
.id = I2C_DRIVERID_CX25840,
|
||||
.attach_adapter = cx25840_attach_adapter,
|
||||
.detach_client = cx25840_detach_client,
|
||||
static struct v4l2_i2c_driver_data v4l2_i2c_data = {
|
||||
.name = "cx25840",
|
||||
.driverid = I2C_DRIVERID_CX25840,
|
||||
.command = cx25840_command,
|
||||
.probe = cx25840_probe,
|
||||
.remove = cx25840_remove,
|
||||
};
|
||||
|
||||
|
||||
static int __init m__init(void)
|
||||
{
|
||||
return i2c_add_driver(&i2c_driver_cx25840);
|
||||
}
|
||||
|
||||
static void __exit m__exit(void)
|
||||
{
|
||||
i2c_del_driver(&i2c_driver_cx25840);
|
||||
}
|
||||
|
||||
module_init(m__init);
|
||||
module_exit(m__exit);
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static void log_video_status(struct i2c_client *client)
|
||||
{
|
||||
static const char *const fmt_strs[] = {
|
||||
"0x0",
|
||||
"NTSC-M", "NTSC-J", "NTSC-4.43",
|
||||
"PAL-BDGHI", "PAL-M", "PAL-N", "PAL-Nc", "PAL-60",
|
||||
"0x9", "0xA", "0xB",
|
||||
"SECAM",
|
||||
"0xD", "0xE", "0xF"
|
||||
};
|
||||
|
||||
struct cx25840_state *state = i2c_get_clientdata(client);
|
||||
u8 vidfmt_sel = cx25840_read(client, 0x400) & 0xf;
|
||||
u8 gen_stat1 = cx25840_read(client, 0x40d);
|
||||
u8 gen_stat2 = cx25840_read(client, 0x40e);
|
||||
int vid_input = state->vid_input;
|
||||
|
||||
v4l_info(client, "Video signal: %spresent\n",
|
||||
(gen_stat2 & 0x20) ? "" : "not ");
|
||||
v4l_info(client, "Detected format: %s\n",
|
||||
fmt_strs[gen_stat1 & 0xf]);
|
||||
|
||||
v4l_info(client, "Specified standard: %s\n",
|
||||
vidfmt_sel ? fmt_strs[vidfmt_sel] : "automatic detection");
|
||||
|
||||
if (vid_input >= CX25840_COMPOSITE1 &&
|
||||
vid_input <= CX25840_COMPOSITE8) {
|
||||
v4l_info(client, "Specified video input: Composite %d\n",
|
||||
vid_input - CX25840_COMPOSITE1 + 1);
|
||||
} else {
|
||||
v4l_info(client, "Specified video input: S-Video (Luma In%d, Chroma In%d)\n",
|
||||
(vid_input & 0xf0) >> 4, (vid_input & 0xf00) >> 8);
|
||||
}
|
||||
|
||||
v4l_info(client, "Specified audioclock freq: %d Hz\n", state->audclk_freq);
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static void log_audio_status(struct i2c_client *client)
|
||||
{
|
||||
struct cx25840_state *state = i2c_get_clientdata(client);
|
||||
u8 download_ctl = cx25840_read(client, 0x803);
|
||||
u8 mod_det_stat0 = cx25840_read(client, 0x804);
|
||||
u8 mod_det_stat1 = cx25840_read(client, 0x805);
|
||||
u8 audio_config = cx25840_read(client, 0x808);
|
||||
u8 pref_mode = cx25840_read(client, 0x809);
|
||||
u8 afc0 = cx25840_read(client, 0x80b);
|
||||
u8 mute_ctl = cx25840_read(client, 0x8d3);
|
||||
int aud_input = state->aud_input;
|
||||
char *p;
|
||||
|
||||
switch (mod_det_stat0) {
|
||||
case 0x00: p = "mono"; break;
|
||||
case 0x01: p = "stereo"; break;
|
||||
case 0x02: p = "dual"; break;
|
||||
case 0x04: p = "tri"; break;
|
||||
case 0x10: p = "mono with SAP"; break;
|
||||
case 0x11: p = "stereo with SAP"; break;
|
||||
case 0x12: p = "dual with SAP"; break;
|
||||
case 0x14: p = "tri with SAP"; break;
|
||||
case 0xfe: p = "forced mode"; break;
|
||||
default: p = "not defined";
|
||||
}
|
||||
v4l_info(client, "Detected audio mode: %s\n", p);
|
||||
|
||||
switch (mod_det_stat1) {
|
||||
case 0x00: p = "not defined"; break;
|
||||
case 0x01: p = "EIAJ"; break;
|
||||
case 0x02: p = "A2-M"; break;
|
||||
case 0x03: p = "A2-BG"; break;
|
||||
case 0x04: p = "A2-DK1"; break;
|
||||
case 0x05: p = "A2-DK2"; break;
|
||||
case 0x06: p = "A2-DK3"; break;
|
||||
case 0x07: p = "A1 (6.0 MHz FM Mono)"; break;
|
||||
case 0x08: p = "AM-L"; break;
|
||||
case 0x09: p = "NICAM-BG"; break;
|
||||
case 0x0a: p = "NICAM-DK"; break;
|
||||
case 0x0b: p = "NICAM-I"; break;
|
||||
case 0x0c: p = "NICAM-L"; break;
|
||||
case 0x0d: p = "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break;
|
||||
case 0x0e: p = "IF FM Radio"; break;
|
||||
case 0x0f: p = "BTSC"; break;
|
||||
case 0x10: p = "high-deviation FM"; break;
|
||||
case 0x11: p = "very high-deviation FM"; break;
|
||||
case 0xfd: p = "unknown audio standard"; break;
|
||||
case 0xfe: p = "forced audio standard"; break;
|
||||
case 0xff: p = "no detected audio standard"; break;
|
||||
default: p = "not defined";
|
||||
}
|
||||
v4l_info(client, "Detected audio standard: %s\n", p);
|
||||
v4l_info(client, "Audio muted: %s\n",
|
||||
(state->unmute_volume >= 0) ? "yes" : "no");
|
||||
v4l_info(client, "Audio microcontroller: %s\n",
|
||||
(download_ctl & 0x10) ?
|
||||
((mute_ctl & 0x2) ? "detecting" : "running") : "stopped");
|
||||
|
||||
switch (audio_config >> 4) {
|
||||
case 0x00: p = "undefined"; break;
|
||||
case 0x01: p = "BTSC"; break;
|
||||
case 0x02: p = "EIAJ"; break;
|
||||
case 0x03: p = "A2-M"; break;
|
||||
case 0x04: p = "A2-BG"; break;
|
||||
case 0x05: p = "A2-DK1"; break;
|
||||
case 0x06: p = "A2-DK2"; break;
|
||||
case 0x07: p = "A2-DK3"; break;
|
||||
case 0x08: p = "A1 (6.0 MHz FM Mono)"; break;
|
||||
case 0x09: p = "AM-L"; break;
|
||||
case 0x0a: p = "NICAM-BG"; break;
|
||||
case 0x0b: p = "NICAM-DK"; break;
|
||||
case 0x0c: p = "NICAM-I"; break;
|
||||
case 0x0d: p = "NICAM-L"; break;
|
||||
case 0x0e: p = "FM radio"; break;
|
||||
case 0x0f: p = "automatic detection"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Configured audio standard: %s\n", p);
|
||||
|
||||
if ((audio_config >> 4) < 0xF) {
|
||||
switch (audio_config & 0xF) {
|
||||
case 0x00: p = "MONO1 (LANGUAGE A/Mono L+R channel for BTSC, EIAJ, A2)"; break;
|
||||
case 0x01: p = "MONO2 (LANGUAGE B)"; break;
|
||||
case 0x02: p = "MONO3 (STEREO forced MONO)"; break;
|
||||
case 0x03: p = "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break;
|
||||
case 0x04: p = "STEREO"; break;
|
||||
case 0x05: p = "DUAL1 (AB)"; break;
|
||||
case 0x06: p = "DUAL2 (AC) (FM)"; break;
|
||||
case 0x07: p = "DUAL3 (BC) (FM)"; break;
|
||||
case 0x08: p = "DUAL4 (AC) (AM)"; break;
|
||||
case 0x09: p = "DUAL5 (BC) (AM)"; break;
|
||||
case 0x0a: p = "SAP"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Configured audio mode: %s\n", p);
|
||||
} else {
|
||||
switch (audio_config & 0xF) {
|
||||
case 0x00: p = "BG"; break;
|
||||
case 0x01: p = "DK1"; break;
|
||||
case 0x02: p = "DK2"; break;
|
||||
case 0x03: p = "DK3"; break;
|
||||
case 0x04: p = "I"; break;
|
||||
case 0x05: p = "L"; break;
|
||||
case 0x06: p = "BTSC"; break;
|
||||
case 0x07: p = "EIAJ"; break;
|
||||
case 0x08: p = "A2-M"; break;
|
||||
case 0x09: p = "FM Radio"; break;
|
||||
case 0x0f: p = "automatic standard and mode detection"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Configured audio system: %s\n", p);
|
||||
}
|
||||
|
||||
if (aud_input) {
|
||||
v4l_info(client, "Specified audio input: Tuner (In%d)\n", aud_input);
|
||||
} else {
|
||||
v4l_info(client, "Specified audio input: External\n");
|
||||
}
|
||||
|
||||
switch (pref_mode & 0xf) {
|
||||
case 0: p = "mono/language A"; break;
|
||||
case 1: p = "language B"; break;
|
||||
case 2: p = "language C"; break;
|
||||
case 3: p = "analog fallback"; break;
|
||||
case 4: p = "stereo"; break;
|
||||
case 5: p = "language AC"; break;
|
||||
case 6: p = "language BC"; break;
|
||||
case 7: p = "language AB"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Preferred audio mode: %s\n", p);
|
||||
|
||||
if ((audio_config & 0xf) == 0xf) {
|
||||
switch ((afc0 >> 3) & 0x3) {
|
||||
case 0: p = "system DK"; break;
|
||||
case 1: p = "system L"; break;
|
||||
case 2: p = "autodetect"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Selected 65 MHz format: %s\n", p);
|
||||
|
||||
switch (afc0 & 0x7) {
|
||||
case 0: p = "chroma"; break;
|
||||
case 1: p = "BTSC"; break;
|
||||
case 2: p = "EIAJ"; break;
|
||||
case 3: p = "A2-M"; break;
|
||||
case 4: p = "autodetect"; break;
|
||||
default: p = "undefined";
|
||||
}
|
||||
v4l_info(client, "Selected 45 MHz format: %s\n", p);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user