2.26. 調諧器函式和資料結構

enum tuner_mode

調諧器模式

常量

T_RADIO

調諧器核心將在收音機模式下工作

T_ANALOG_TV

調諧器核心將在模擬電視模式下工作

描述

較舊的板卡只有一個調諧器裝置,但某些裝置具有單獨的收音機調諧器。在任何情況下,調諧器核心都需要知道調諧器晶片是否將在收音機模式或模擬電視模式下使用,因為在收音機模式下,頻率的指定範圍與電視模式不同。此列舉由調諧器核心使用,以便使用正確的調諧器範圍,並最終在收音機模式下使用不同的調諧器晶片。

struct tuner_setup

設定調諧器晶片組

定義:

struct tuner_setup {
    unsigned short  addr;
    unsigned int    type;
    unsigned int    mode_mask;
    void *config;
    int (*tuner_callback)(void *dev, int component, int cmd, int arg);
};

成員

addr

用於控制調諧器裝置/晶片組的 I2C 地址

type

調諧器的型別,如 TUNER_* 宏中定義的那樣。每個不同的調諧器型號應具有唯一的識別符號。

mode_mask

帶有允許的調諧器模式的掩碼:V4L2_TUNER_RADIO、V4L2_TUNER_ANALOG_TV 和/或 V4L2_TUNER_DIGITAL_TV,描述調諧器是否應用於支援收音機、模擬電視和/或數字電視。

config

用於為需要設定額外引數的複雜調諧器傳送調諧器特定的配置。只有極少數調諧器需要它,並且應避免在新調諧器上使用它。

tuner_callback

一些調諧器需要回調橋驅動程式,以便執行某些任務,例如在橋晶片組上升高 GPIO,以便執行諸如重置裝置之類的操作。

描述

較舊的板卡只有一個調諧器裝置。現在,單個板卡上可能存在多個調諧器裝置。使用 TUNER_SET_TYPE_ADDR 傳遞 tuner_setup 結構可以依次設定每個調諧器裝置。

由於可能存在多個裝置,因此向單個 i2c 裝置傳送命令已不再足夠。相反,您應該將命令廣播到所有 i2c 裝置。

透過正確設定 mode_mask,您可以選擇特定調諧器裝置接受哪些命令。例如,如果裝置是僅收音機調諧器,則將 mode_mask 設定為 T_RADIO。該特定調諧器將僅在調諧器處於收音機模式時接受命令,並在調諧器設定為電視模式時忽略它們。

enum param_type

調諧器引數的型別

常量

TUNER_PARAM_TYPE_RADIO

調諧器引數用於 FM 和/或 AM 收音機

TUNER_PARAM_TYPE_PAL

調諧器引數用於 PAL 彩色電視標準

TUNER_PARAM_TYPE_SECAM

調諧器引數用於 SECAM 彩色電視標準

TUNER_PARAM_TYPE_NTSC

調諧器引數用於 NTSC 彩色電視標準

TUNER_PARAM_TYPE_DIGITAL

調諧器引數用於數字電視

struct tuner_range

定義調諧器支援的頻率

定義:

struct tuner_range {
    unsigned short limit;
    unsigned char config;
    unsigned char cb;
};

成員

limit

該範圍支援的最大頻率,以 62.5 kHz (TV) 或 62.5 Hz (Radio) 為單位,由 V4L2_TUNER_CAP_LOW 定義。

config

設定此模式的頻帶切換位元組 (BB) 的值。

cb

設定此模式的 CB 位元組的值。

描述

請注意,像 xc3028/xc4000/xc5000 這樣的數字調諧器不使用這些範圍,因為它們是在驅動程式內部定義的。這由與“Philips 方式”相容的模擬調諧器用於設定調諧器。在這些裝置上,調諧器設定透過 4 個位元組完成

  1. 分頻器位元組 1 (DB1)

  2. 分頻器位元組 2 (DB2)

  3. 控制位元組 (CB)

  4. 頻帶切換位元組 (BB)

一些調諧器還具有一個附加的可選輔助位元組 (AB)。

struct tuner_params

用於設定調諧器的引數。這些引數由 drivers/media/tuners/tuner-types.c 使用,以指定調諧器屬性。大多數引數用於基於 tda9887 IF-PLL 多標準模擬電視/收音機解調器的調諧器,這在傳統的模擬調諧器上非常常見。

定義:

struct tuner_params {
    enum param_type type;
    unsigned int cb_first_if_lower_freq:1;
    unsigned int has_tda9887:1;
    unsigned int port1_fm_high_sensitivity:1;
    unsigned int port2_fm_high_sensitivity:1;
    unsigned int fm_gain_normal:1;
    unsigned int intercarrier_mode:1;
    unsigned int port1_active:1;
    unsigned int port2_active:1;
    unsigned int port1_invert_for_secam_lc:1;
    unsigned int port2_invert_for_secam_lc:1;
    unsigned int port1_set_for_fm_mono:1;
    unsigned int default_pll_gating_18:1;
    unsigned int radio_if:2;
    signed int default_top_low:5;
    signed int default_top_mid:5;
    signed int default_top_high:5;
    signed int default_top_secam_low:5;
    signed int default_top_secam_mid:5;
    signed int default_top_secam_high:5;
    u16 iffreq;
    unsigned int count;
    const struct tuner_range *ranges;
};

成員

type

調諧器引數的型別,如 enum param_type 中定義的那樣。如果調諧器支援多種標準,則應使用陣列,每種不同的標準一行。

cb_first_if_lower_freq

許多基於 Philips 的調諧器在其資料表中都有這樣的註釋:“對於涉及頻帶切換的頻道選擇,為了確保平滑地調諧到所需的頻道而不會導致不必要的充電泵動作,建議考慮所需頻道頻率與當前頻道頻率之間的差異。不必要的充電泵動作將導致非常低的調諧電壓,這可能會將振盪器驅動到極端條件”。如果此調諧器需要此檢查,請將 cb_first_if_lower_freq 設定為 1。我透過首先將電影片率設定為 203 MHz,然後切換到 96.6 MHz FM 收音機來測試了 PAL 的這一點。除非首先發送控制位元組,否則結果是靜態的。

has_tda9887

如果此調諧器使用 tda9887,則設定為 1

port1_fm_high_sensitivity

許多 Philips 調諧器使用 tda9887 PORT1 來選擇 FM 收音機的靈敏度。如果此設定值為 1,則將 PORT1 設定為 1 以獲得適當的 FM 接收。

port2_fm_high_sensitivity

一些 Philips 調諧器使用 tda9887 PORT2 來選擇 FM 收音機的靈敏度。如果此設定值為 1,則將 PORT2 設定為 1 以獲得適當的 FM 接收。

fm_gain_normal

一些 Philips 調諧器使用 tda9887 cGainNormal 來選擇 FM 收音機的靈敏度。如果此設定值為 1,則 e 暫存器將使用 cGainNormal 而不是 cGainLow。

intercarrier_mode

大多數帶有 tda9887 的調諧器使用 QSS 模式。一些(更便宜的)調諧器使用 Intercarrier 模式。如果此設定值為 1,則需要將調諧器設定為 intercarrier 模式。

port1_active

此設定設定 PORT1 的預設值。0 表示非活動,1 表示活動。注意:寫入 tda9887 的實際位值是反轉的。因此,這裡的 0 表示 B6 位中的 1。

port2_active

此設定設定 PORT2 的預設值。0 表示非活動,1 表示活動。注意:寫入 tda9887 的實際位值是反轉的。因此,這裡的 0 表示 B7 位中的 1。

port1_invert_for_secam_lc

有時,當選擇 SECAM-L’ 標準時,PORT1 會反轉。如果需要,請將此位設定為 1。

port2_invert_for_secam_lc

有時,當選擇 SECAM-L’ 標準時,PORT2 會反轉。如果需要,請將此位設定為 1。

port1_set_for_fm_mono

某些卡需要 PORT1 為 1 表示單聲道 FM 收音機,為 0 表示立體聲。

default_pll_gating_18

選擇 18%(或根據資料表 0%)L 標準 PLL 門控,而不是驅動程式的預設值 36%。

radio_if

在收音機模式下使用的 IF。帶有單獨的收音機 IF 濾波器的調諧器似乎使用 10.7,而沒有濾波器的調諧器 PAL/SECAM 調諧器使用 33.3,NTSC 調諧器使用 41.3。0 = 10.7, 1 = 33.3, 2 = 41.3

default_top_low

低頻段的預設 tda9887 TOP 值(以 dB 為單位)。預設值為 0。範圍:-16:+15

default_top_mid

中頻段的預設 tda9887 TOP 值(以 dB 為單位)。預設值為 0。範圍:-16:+15

default_top_high

高頻段的預設 tda9887 TOP 值(以 dB 為單位)。預設值為 0。範圍:-16:+15

default_top_secam_low

SECAM-L/L’ 低頻段的預設 tda9887 TOP 值(以 dB 為單位)。預設值為 0。一些調諧器需要 SECAM-L/L’ 標準的不同 TOP 值。範圍:-16:+15

default_top_secam_mid

SECAM-L/L’ 中頻段的預設 tda9887 TOP 值(以 dB 為單位)。預設值為 0。一些調諧器需要 SECAM-L/L’ 標準的不同 TOP 值。範圍:-16:+15

default_top_secam_high

SECAM-L/L’ 高頻段的預設 tda9887 TOP 值(以 dB 為單位)。預設值為 0。一些調諧器需要 SECAM-L/L’ 標準的不同 TOP 值。範圍:-16:+15

iffreq

數字模式下調諧器使用的中頻 (IF)。

count

ranges 陣列的大小。

ranges

調諧器支援的頻率範圍陣列。

struct tunertype

描述已知的調諧器。

定義:

struct tunertype {
    char *name;
    unsigned int count;
    const struct tuner_params *params;
    u16 min;
    u16 max;
    u32 stepsize;
    u8 *initdata;
    u8 *sleepdata;
};

成員

name

帶有調諧器名稱的字串。

count

struct tuner_params 陣列的大小。

params

指向 struct tuner_params 陣列的指標。

min

最小調諧器頻率,以 62.5 kHz 步長為單位。應乘以 16 以轉換為 MHz。

max

最小調諧器頻率,以 62.5 kHz 步長為單位。應乘以 16 以轉換為 MHz。

stepsize

頻率步長,以 Hz 為單位。

initdata

可選的位元組序列,用於初始化調諧器。

sleepdata

可選的位元組序列,用於關閉調諧器電源。