for PT2 Support
@@ -9,7 +9,6 @@ | ||
9 | 9 | #include <linux/errno.h> |
10 | 10 | #include <linux/pci.h> |
11 | 11 | #include <linux/init.h> |
12 | -#include <linux/interrupt.h> | |
13 | 12 | |
14 | 13 | #include <asm/system.h> |
15 | 14 | #include <asm/io.h> |
@@ -19,6 +18,9 @@ | ||
19 | 18 | #include <linux/mutex.h> |
20 | 19 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23) |
21 | 20 | #include <linux/freezer.h> |
21 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) | |
22 | +#include <linux/sched.h> | |
23 | +#endif | |
22 | 24 | #else |
23 | 25 | #define set_freezable() |
24 | 26 | #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11) |
@@ -60,7 +62,8 @@ | ||
60 | 62 | MODULE_PARM_DESC(debug, "LNB level (0:OFF 1:+11V 2:+15V)"); |
61 | 63 | |
62 | 64 | static struct pci_device_id pt1_pci_tbl[] = { |
63 | - { 0x10ee, 0x211a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, | |
65 | + { 0x10ee, 0x211a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PT1 }, | |
66 | + { 0x10ee, 0x222a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PT2 }, | |
64 | 67 | { 0, } |
65 | 68 | }; |
66 | 69 | MODULE_DEVICE_TABLE(pci, pt1_pci_tbl); |
@@ -95,6 +98,7 @@ | ||
95 | 98 | __u32 base_minor ; |
96 | 99 | struct cdev cdev[MAX_CHANNEL]; |
97 | 100 | wait_queue_head_t dma_wait_q ;// for poll on reading |
101 | + int cardtype ; | |
98 | 102 | DMA_CONTROL *dmactl[DMA_RING_SIZE]; |
99 | 103 | PT1_CHANNEL *channel[MAX_CHANNEL]; |
100 | 104 | }PT1_DEVICE; |
@@ -111,7 +115,7 @@ | ||
111 | 115 | int type ; // チャネルタイプ |
112 | 116 | __u32 packet_size ; // パケットサイズ |
113 | 117 | __u32 drop ; // パケットドロップ数 |
114 | - struct mutex lock ; // CH別mutex_lock用 | |
118 | + struct mutex lock ; // CH別mutex_lock用 | |
115 | 119 | __u32 size ; // DMAされたサイズ |
116 | 120 | __u32 maxsize ; // DMA用バッファサイズ |
117 | 121 | __u32 bufsize ; // チャネルに割り振られたサイズ |
@@ -181,7 +185,6 @@ | ||
181 | 185 | int lp2 ; |
182 | 186 | int dma_channel ; |
183 | 187 | int packet_pos ; |
184 | - __u32 addr ; | |
185 | 188 | __u32 *dataptr ; |
186 | 189 | __u32 *curdataptr ; |
187 | 190 | __u32 val ; |
@@ -340,6 +343,11 @@ | ||
340 | 343 | mutex_unlock(&device[lp]->lock); |
341 | 344 | return -EIO ; |
342 | 345 | } |
346 | + set_sleepmode(channel->ptr->regs, &channel->lock, | |
347 | + channel->address, channel->type, TYPE_WAKEUP); | |
348 | + | |
349 | + schedule_timeout_interruptible(msecs_to_jiffies(50)); | |
350 | + | |
343 | 351 | channel->drop = 0 ; |
344 | 352 | channel->valid = TRUE ; |
345 | 353 | channel->overflow = 0 ; |
@@ -379,6 +387,10 @@ | ||
379 | 387 | channel->req_dma = FALSE ; |
380 | 388 | wake_up(&channel->ptr->dma_wait_q); |
381 | 389 | } |
390 | + set_sleepmode(channel->ptr->regs, &channel->lock, | |
391 | + channel->address, channel->type, TYPE_SLEEP); | |
392 | + | |
393 | + schedule_timeout_interruptible(msecs_to_jiffies(50)); | |
382 | 394 | mutex_unlock(&channel->ptr->lock); |
383 | 395 | return 0; |
384 | 396 | } |
@@ -515,12 +527,12 @@ | ||
515 | 527 | return 0 ; |
516 | 528 | case LNB_ENABLE: |
517 | 529 | if(lnb){ |
518 | - settuner_reset(channel->ptr->regs, lnb, TUNER_POWER_ON_RESET_DISABLE); | |
530 | + settuner_reset(channel->ptr->regs, lnb, TUNER_POWER_ON_RESET_DISABLE, channel->ptr->cardtype); | |
519 | 531 | } |
520 | 532 | return 0 ; |
521 | 533 | case LNB_DISABLE: |
522 | 534 | if(lnb){ |
523 | - settuner_reset(channel->ptr->regs, LNB_OFF, TUNER_POWER_ON_RESET_DISABLE); | |
535 | + settuner_reset(channel->ptr->regs, LNB_OFF, TUNER_POWER_ON_RESET_DISABLE, channel->ptr->cardtype); | |
524 | 536 | } |
525 | 537 | return 0 ; |
526 | 538 | } |
@@ -652,6 +664,7 @@ | ||
652 | 664 | printk(KERN_ERR "PT1:out of memory !"); |
653 | 665 | return -ENOMEM ; |
654 | 666 | } |
667 | + dev_conf->cardtype = ent->driver_data ; | |
655 | 668 | for (i = 0; i < DMA_RING_SIZE; i++) { |
656 | 669 | dev_conf->dmactl[i] = kzalloc(sizeof(DMA_CONTROL), GFP_KERNEL); |
657 | 670 | if(!dev_conf->dmactl[i]){ |
@@ -679,21 +692,21 @@ | ||
679 | 692 | goto out_err_regbase; |
680 | 693 | } |
681 | 694 | // 初期化処理 |
682 | - if(xc3s_init(dev_conf->regs)){ | |
695 | + if(xc3s_init(dev_conf->regs, dev_conf->cardtype)){ | |
683 | 696 | printk(KERN_ERR "Error xc3s_init\n"); |
684 | 697 | goto out_err_fpga; |
685 | 698 | } |
686 | 699 | // チューナリセット |
687 | - settuner_reset(dev_conf->regs, LNB_OFF, TUNER_POWER_ON_RESET_ENABLE); | |
700 | + settuner_reset(dev_conf->regs, LNB_OFF, TUNER_POWER_ON_RESET_ENABLE, dev_conf->cardtype); | |
688 | 701 | schedule_timeout_interruptible(msecs_to_jiffies(50)); |
689 | 702 | |
690 | - settuner_reset(dev_conf->regs, LNB_OFF, TUNER_POWER_ON_RESET_DISABLE); | |
703 | + settuner_reset(dev_conf->regs, LNB_OFF, TUNER_POWER_ON_RESET_DISABLE, dev_conf->cardtype); | |
691 | 704 | schedule_timeout_interruptible(msecs_to_jiffies(10)); |
692 | 705 | mutex_init(&dev_conf->lock); |
693 | 706 | |
694 | 707 | // Tuner 初期化処理 |
695 | 708 | for(lp = 0 ; lp < MAX_TUNER ; lp++){ |
696 | - rc = tuner_init(dev_conf->regs, &dev_conf->lock, lp); | |
709 | + rc = tuner_init(dev_conf->regs, &dev_conf->lock, lp, dev_conf->cardtype); | |
697 | 710 | if(rc < 0){ |
698 | 711 | printk(KERN_ERR "Error tuner_init\n"); |
699 | 712 | goto out_err_fpga; |
@@ -851,7 +864,7 @@ | ||
851 | 864 | unregister_chrdev_region(dev_conf->dev, MAX_CHANNEL); |
852 | 865 | writel(0xb0b0000, dev_conf->regs); |
853 | 866 | writel(0, dev_conf->regs + 4); |
854 | - settuner_reset(dev_conf->regs, LNB_OFF, TUNER_POWER_OFF); | |
867 | + settuner_reset(dev_conf->regs, LNB_OFF, TUNER_POWER_OFF, dev_conf->cardtype); | |
855 | 868 | release_mem_region(dev_conf->mmio_start, dev_conf->mmio_len); |
856 | 869 | iounmap(dev_conf->regs); |
857 | 870 | for (i = 0; i < DMA_RING_SIZE; i++) { |
@@ -3,8 +3,6 @@ | ||
3 | 3 | /***************************************************************************/ |
4 | 4 | /* */ |
5 | 5 | /***************************************************************************/ |
6 | -#define MAX_ISDB_S_INIT 19 // ISDB-S 初期化データ数 | |
7 | -#define MAX_ISDB_T_INIT 16 // ISDB-S 初期化データ数 | |
8 | 6 | #define MAX_BS_CHANNEL 36 // 周波数テーブル数 |
9 | 7 | #define MAX_ISDB_T_CHANNEL 113 // 周波数テーブル数(地デジタル) |
10 | 8 | #define MAX_BS_CHANNEL_PLL_COMMAND 3 // PLLロックするためのコマンド数 |
@@ -24,15 +22,18 @@ | ||
24 | 22 | /***************************************************************************/ |
25 | 23 | extern WBLOCK com_initdata; //初期化(共通) |
26 | 24 | extern WBLOCK isdb_s_init1; //ISDB-S先頭 |
25 | +extern WBLOCK isdb_s_init_pt2_1; //ISDB-S先頭 | |
27 | 26 | extern WBLOCK isdb_s_init21; //ISDB-S最終 |
28 | 27 | extern WBLOCK isdb_t_init17; //ISDB-T最終 |
29 | 28 | extern WBLOCK bs_pll_lock; //ISDB-S PLLロック確認 |
30 | -extern WBLOCK *isdb_s_initial[MAX_ISDB_S_INIT]; | |
31 | -extern WBLOCK *isdb_t_initial[MAX_ISDB_T_INIT]; | |
29 | +extern WBLOCK *isdb_s_initial[]; | |
30 | +extern WBLOCK *isdb_s_initial_pt2[]; | |
31 | +extern WBLOCK *isdb_t_initial[]; | |
32 | +extern WBLOCK *isdb_t_initial_pt2[]; | |
32 | 33 | /***************************************************************************/ |
33 | 34 | /* BS用データ定義 */ |
34 | 35 | /***************************************************************************/ |
35 | -extern WBLOCK_BS_PLL bs_pll[MAX_BS_CHANNEL] ; // 周波数テーブル | |
36 | +extern WBLOCK_BS_PLL bs_pll[] ; // 周波数テーブル | |
36 | 37 | extern WBLOCK *bs_get_ts_id[(MAX_BS_TS_ID / 2)] ; // TS-ID取得テーブル |
37 | 38 | extern WBLOCK bs_tmcc_get_1; // TMCC取得テーブル |
38 | 39 | extern WBLOCK bs_tmcc_get_2; // TMCC取得テーブル |
@@ -49,7 +50,7 @@ | ||
49 | 50 | /***************************************************************************/ |
50 | 51 | extern WBLOCK isdb_t_pll_base; // 地デジ用周波数テーブルbase |
51 | 52 | extern WBLOCK isdb_t_pll_lock; |
52 | -extern WBLOCK_BS_PLL isdb_t_info[MAX_ISDB_T_INFO_LEN]; | |
53 | +extern WBLOCK_BS_PLL isdb_t_info[]; | |
53 | 54 | extern WBLOCK isdb_t_check_tune; |
54 | 55 | extern WBLOCK isdb_t_tune_read; |
55 | 56 | extern WBLOCK isdb_t_tmcc_read_1; |
@@ -65,7 +66,9 @@ | ||
65 | 66 | /* 省電力用データ定義 */ |
66 | 67 | /***************************************************************************/ |
67 | 68 | extern WBLOCK isdb_s_wake; |
69 | +extern WBLOCK isdb_s_wake2; | |
68 | 70 | extern WBLOCK isdb_t_wake; |
71 | +extern WBLOCK isdb_t_wake2; | |
69 | 72 | |
70 | 73 | extern WBLOCK isdb_s_sleep; |
71 | 74 | extern WBLOCK isdb_t_sleep; |
@@ -9,6 +9,12 @@ | ||
9 | 9 | #include <linux/interrupt.h> |
10 | 10 | #include <linux/mutex.h> |
11 | 11 | |
12 | +#include <linux/version.h> | |
13 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32) | |
14 | +#include <linux/sched.h> | |
15 | +#endif | |
16 | + | |
17 | + | |
12 | 18 | #include <asm/system.h> |
13 | 19 | #include <asm/io.h> |
14 | 20 | #include <asm/irq.h> |
@@ -17,6 +23,7 @@ | ||
17 | 23 | #include "pt1_com.h" |
18 | 24 | #include "pt1_i2c.h" |
19 | 25 | #include "pt1_pci.h" |
26 | +#include "pt1_tuner.h" | |
20 | 27 | |
21 | 28 | #define PROGRAM_ADDRESS 1024 |
22 | 29 | static int state = STATE_STOP ; |
@@ -40,12 +47,13 @@ | ||
40 | 47 | writel(val, regs + FIFO_ADDR); |
41 | 48 | } |
42 | 49 | |
43 | -int xc3s_init(void __iomem *regs) | |
50 | +int xc3s_init(void __iomem *regs, int cardtype) | |
44 | 51 | { |
45 | 52 | |
46 | 53 | __u32 val ; |
47 | 54 | int lp ; |
48 | 55 | int rc ; |
56 | + int phase ; | |
49 | 57 | |
50 | 58 | /* |
51 | 59 | val = (1 << 19) | (1 << 27) | (1 << 16) | (1 << 24) | (1 << 17) | (1 << 25); |
@@ -98,7 +106,16 @@ | ||
98 | 106 | if(rc){ |
99 | 107 | return -EIO ; |
100 | 108 | } |
101 | - for(lp = 0 ; lp < XC3S_PCI_CLOCK ; lp++){ | |
109 | + switch(cardtype) { | |
110 | + case PT1: | |
111 | + phase = XC3S_PCI_CLOCK; | |
112 | + break; | |
113 | + case PT2: | |
114 | + phase = XC3S_PCI_CLOCK_PT2; | |
115 | + break; | |
116 | + } | |
117 | + | |
118 | + for(lp = 0 ; lp < phase ; lp++){ | |
102 | 119 | rc = i2c_lock_one(regs, WRITE_RAM_ENABLE, RAM_SHIFT); |
103 | 120 | if(rc < 0){ |
104 | 121 | printk(KERN_ERR "PT1:LOCK FALUT\n"); |
@@ -47,22 +47,52 @@ | ||
47 | 47 | {112, 0x80E4} // 101〜112迄 |
48 | 48 | }; |
49 | 49 | |
50 | -void settuner_reset(void __iomem *regs, __u32 lnb, __u32 tuner) | |
50 | +void settuner_reset(void __iomem *regs, __u32 lnb, __u32 tuner, int cardtype) | |
51 | 51 | { |
52 | - __u32 val = 0; | |
52 | + __u32 val = TUNER_POWER_OFF; | |
53 | 53 | switch(lnb){ |
54 | - case LNB_11V: val = (1 << BIT_LNB_DOWN); break ; | |
55 | - case LNB_15V: val = (1 << BIT_LNB_UP) | (1 << BIT_LNB_DOWN) ; break ; | |
54 | + case LNB_11V: | |
55 | + val = (1 << BIT_LNB_DOWN); | |
56 | + break ; | |
57 | + case LNB_15V: | |
58 | + val = (1 << BIT_LNB_UP) | (1 << BIT_LNB_DOWN); | |
59 | + break ; | |
56 | 60 | } |
57 | 61 | |
58 | - switch(tuner){ | |
59 | - case TUNER_POWER_ON_RESET_ENABLE: val |= (1 << BIT_TUNER) ; break ; | |
60 | - case TUNER_POWER_ON_RESET_DISABLE: val |= (1 << BIT_TUNER) | (1 << BIT_RESET) ; break ; | |
62 | + if(cardtype == PT1) { | |
63 | + switch(tuner){ | |
64 | + case TUNER_POWER_ON_RESET_ENABLE: | |
65 | + val |= (1 << BIT_TUNER); | |
66 | + break; | |
67 | + case TUNER_POWER_ON_RESET_DISABLE: | |
68 | + val |= (1 << BIT_TUNER) | (1 << BIT_RESET); | |
69 | + break ; | |
70 | + } | |
71 | + } else if(cardtype == PT2) { | |
72 | + switch(tuner){ | |
73 | + case TUNER_POWER_ON_RESET_ENABLE: | |
74 | + val |= (1 << BIT_TUNER) | |
75 | + | (1 << BIT_33A1) | |
76 | + | (1 << BIT_33A2) | |
77 | + | (1 << BIT_5A_) | |
78 | + | (1 << BIT_5A1) | |
79 | + | (1 << BIT_5A2); | |
80 | + break; | |
81 | + case TUNER_POWER_ON_RESET_DISABLE: | |
82 | + val |= (1 << BIT_TUNER) | |
83 | + | (1 << BIT_RESET) | |
84 | + | (1 << BIT_33A1) | |
85 | + | (1 << BIT_33A2) | |
86 | + | (1 << BIT_5A_) | |
87 | + | (1 << BIT_5A1) | |
88 | + | (1 << BIT_5A2); | |
89 | + break ; | |
90 | + } | |
61 | 91 | } |
92 | + writel(val, (regs + CFG_REGS_ADDR)); | |
62 | 93 | |
63 | - writel(val, (regs + 4)); | |
64 | 94 | } |
65 | -static int init_isdb_s(void __iomem *regs, struct mutex *lock, __u32 addr) | |
95 | +static int init_isdb_s(void __iomem *regs, struct mutex *lock, __u32 addr, int cardtype) | |
66 | 96 | { |
67 | 97 | |
68 | 98 | WBLOCK wk; |
@@ -72,37 +102,62 @@ | ||
72 | 102 | // ISDB-S/T初期化 |
73 | 103 | memcpy(&wk, &com_initdata, sizeof(WBLOCK)); |
74 | 104 | |
75 | - // 初期化1(なぜかREADなので) | |
76 | - memcpy(&wk, &isdb_s_init1, sizeof(WBLOCK)); | |
77 | - wk.addr = addr; | |
78 | - val = i2c_read(regs, lock, &wk, 1); | |
79 | - if((val & 0xff) != 0x41){ | |
105 | + if(cardtype == PT1){ | |
106 | + // 初期化1(なぜかREADなので) | |
107 | + memcpy(&wk, &isdb_s_init1, sizeof(WBLOCK)); | |
108 | + wk.addr = addr; | |
109 | + val = i2c_read(regs, lock, &wk, 1); | |
80 | 110 | printk(KERN_INFO "PT1:ISDB-S Read(%x)\n", val); |
111 | + if((val & 0xff) != 0x41){ | |
112 | + return -EIO ; | |
113 | + } | |
114 | + for(lp = 0 ; isdb_s_initial[lp] != NULL ; lp++){ | |
115 | + memcpy(&wk, isdb_s_initial[lp], sizeof(WBLOCK)); | |
116 | + wk.addr = addr; | |
117 | + i2c_write(regs, lock, &wk); | |
118 | + } | |
119 | + }else if(cardtype == PT2){ | |
120 | + // 初期化1(なぜかREADなので) | |
121 | + memcpy(&wk, &isdb_s_init_pt2_1, sizeof(WBLOCK)); | |
122 | + wk.addr = addr; | |
123 | + val = i2c_read(regs, lock, &wk, 1); | |
124 | + printk(KERN_INFO "PT1:ISDB-S Read(%x)\n", val); | |
125 | + if((val & 0xff) != 0x52){ | |
126 | + return -EIO ; | |
127 | + } | |
128 | + for(lp = 0 ; isdb_s_initial_pt2[lp] != NULL ; lp++){ | |
129 | + memcpy(&wk, isdb_s_initial_pt2[lp], sizeof(WBLOCK)); | |
130 | + wk.addr = addr; | |
131 | + i2c_write(regs, lock, &wk); | |
132 | + } | |
133 | + }else{ | |
81 | 134 | return -EIO ; |
82 | 135 | } |
83 | - for(lp = 0 ; lp < MAX_ISDB_S_INIT ; lp++){ | |
84 | - memcpy(&wk, isdb_s_initial[lp], sizeof(WBLOCK)); | |
85 | - wk.addr = addr; | |
86 | - i2c_write(regs, lock, &wk); | |
87 | - } | |
88 | - | |
89 | 136 | return 0 ; |
90 | 137 | } |
91 | -static void init_isdb_t(void __iomem *regs, struct mutex *lock, __u32 addr) | |
138 | +static void init_isdb_t(void __iomem *regs, struct mutex *lock, __u32 addr, int cardtype) | |
92 | 139 | { |
93 | 140 | int lp ; |
94 | 141 | WBLOCK wk; |
95 | 142 | |
96 | - // ISDB-S/T初期化 | |
97 | - for(lp = 0 ; lp < MAX_ISDB_T_INIT ; lp++){ | |
98 | - memcpy(&wk, isdb_t_initial[lp], sizeof(WBLOCK)); | |
99 | - wk.addr = addr; | |
100 | - i2c_write(regs, lock, &wk); | |
143 | + if(cardtype == PT1){ | |
144 | + // ISDB-S/T初期化 | |
145 | + for(lp = 0 ; isdb_t_initial[lp] != NULL ; lp++){ | |
146 | + memcpy(&wk, isdb_t_initial[lp], sizeof(WBLOCK)); | |
147 | + wk.addr = addr; | |
148 | + i2c_write(regs, lock, &wk); | |
149 | + } | |
150 | + }else if(cardtype == PT2){ | |
151 | + // ISDB-S/T初期化 | |
152 | + for(lp = 0 ; isdb_t_initial_pt2[lp] != NULL ; lp++){ | |
153 | + memcpy(&wk, isdb_t_initial_pt2[lp], sizeof(WBLOCK)); | |
154 | + wk.addr = addr; | |
155 | + i2c_write(regs, lock, &wk); | |
156 | + } | |
101 | 157 | } |
102 | 158 | |
103 | - | |
104 | 159 | } |
105 | -int tuner_init(void __iomem *regs, struct mutex *lock, int tuner_no) | |
160 | +int tuner_init(void __iomem *regs, struct mutex *lock, int tuner_no, int cardtype) | |
106 | 161 | { |
107 | 162 | |
108 | 163 | int rc ; |
@@ -117,11 +172,11 @@ | ||
117 | 172 | wk.addr = tuner_info[tuner_no].isdb_s ; |
118 | 173 | i2c_write(regs, lock, &wk); |
119 | 174 | |
120 | - rc = init_isdb_s(regs, lock, tuner_info[tuner_no].isdb_s); | |
175 | + rc = init_isdb_s(regs, lock, tuner_info[tuner_no].isdb_s, cardtype); | |
121 | 176 | if(rc < 0){ |
122 | 177 | return rc ; |
123 | 178 | } |
124 | - init_isdb_t(regs, lock, tuner_info[tuner_no].isdb_t); | |
179 | + init_isdb_t(regs, lock, tuner_info[tuner_no].isdb_t, cardtype); | |
125 | 180 | |
126 | 181 | memcpy(&wk, &isdb_s_init21, sizeof(WBLOCK)); |
127 | 182 | wk.addr = tuner_info[tuner_no].isdb_s ; |
@@ -136,33 +191,46 @@ | ||
136 | 191 | void set_sleepmode(void __iomem *regs, struct mutex *lock, int address, int tuner_type, int type) |
137 | 192 | { |
138 | 193 | WBLOCK wk; |
194 | + if(type == TYPE_WAKEUP){ | |
195 | + switch(tuner_type){ | |
196 | + case CHANNEL_TYPE_ISDB_S: | |
197 | + printk(KERN_INFO "PT1:ISDB-S Wakeup\n"); | |
198 | + memcpy(&wk, &isdb_s_wake, sizeof(WBLOCK)); | |
199 | + wk.addr = address; | |
200 | + i2c_write(regs, lock, &wk); | |
139 | 201 | |
140 | - if(type == TYPE_WAKEUP){ | |
202 | + memcpy(&wk, &isdb_s_wake2, sizeof(WBLOCK)); | |
203 | + wk.addr = address; | |
204 | + i2c_write(regs, lock, &wk); | |
205 | + break ; | |
206 | + case CHANNEL_TYPE_ISDB_T: | |
207 | + printk(KERN_INFO "PT1:ISDB-T Wakeup\n"); | |
208 | + memcpy(&wk, &isdb_t_wake, sizeof(WBLOCK)); | |
209 | + wk.addr = address; | |
210 | + i2c_write(regs, lock, &wk); | |
211 | + | |
212 | + memcpy(&wk, &isdb_t_wake2, sizeof(WBLOCK)); | |
213 | + wk.addr = address; | |
214 | + i2c_write(regs, lock, &wk); | |
215 | + break ; | |
216 | + } | |
217 | + } | |
218 | + if(type == TYPE_SLEEP){ | |
141 | 219 | switch(tuner_type){ |
142 | - case CHANNEL_TYPE_ISDB_S:memcpy(&wk, &isdb_s_wake, sizeof(WBLOCK));break ; | |
143 | - case CHANNEL_TYPE_ISDB_T:memcpy(&wk, &isdb_t_wake, sizeof(WBLOCK));break ; | |
220 | + case CHANNEL_TYPE_ISDB_S: | |
221 | + printk(KERN_INFO "PT1:ISDB-S Sleep\n"); | |
222 | + memcpy(&wk, &isdb_s_sleep, sizeof(WBLOCK)); | |
223 | + wk.addr = address; | |
224 | + i2c_write(regs, lock, &wk); | |
225 | + break ; | |
226 | + case CHANNEL_TYPE_ISDB_T: | |
227 | + printk(KERN_INFO "PT1:ISDB-T Sleep\n"); | |
228 | + memcpy(&wk, &isdb_t_sleep, sizeof(WBLOCK)); | |
229 | + wk.addr = address; | |
230 | + i2c_write(regs, lock, &wk); | |
231 | + break ; | |
144 | 232 | } |
145 | - wk.addr = address ; | |
146 | - i2c_write(regs, lock, &wk); | |
147 | 233 | } |
148 | - switch(tuner_type){ | |
149 | - case CHANNEL_TYPE_ISDB_S: | |
150 | - printk(KERN_INFO "PT1:ISDB-S Sleep\n"); | |
151 | - memcpy(&wk, &isdb_s_sleep, sizeof(WBLOCK)); | |
152 | - if(type == TYPE_WAKEUP){ | |
153 | - wk.value[1] = 0x01 ; | |
154 | - } | |
155 | - break ; | |
156 | - case CHANNEL_TYPE_ISDB_T: | |
157 | - printk(KERN_INFO "PT1:ISDB-T Sleep\n"); | |
158 | - memcpy(&wk, &isdb_t_sleep, sizeof(WBLOCK)); | |
159 | - if(type == TYPE_WAKEUP){ | |
160 | - wk.value[1] = 0x90 ; | |
161 | - } | |
162 | - break ; | |
163 | - } | |
164 | - wk.addr = address; | |
165 | - i2c_write(regs, lock, &wk); | |
166 | 234 | } |
167 | 235 | |
168 | 236 | int bs_frequency(void __iomem *regs, struct mutex *lock, int addr, int channel) |
@@ -14,7 +14,9 @@ | ||
14 | 14 | #define FIFO_ADDR 0x10 // FIFOに書くアドレス |
15 | 15 | #define DMA_ADDR 0x14 // DMA設定に書くアドレス |
16 | 16 | #define TS_TEST_ENABLE_ADDR 0x08 // |
17 | +#define CFG_REGS_ADDR 0x04 | |
17 | 18 | |
19 | + | |
18 | 20 | /***************************************************************************/ |
19 | 21 | /* DMAエラー定義 */ |
20 | 22 | /***************************************************************************/ |
@@ -52,6 +52,8 @@ | ||
52 | 52 | #define READ_UNLOCK (1 << 31) |
53 | 53 | |
54 | 54 | #define XC3S_PCI_CLOCK (512 / 4) |
55 | +#define XC3S_PCI_CLOCK_PT2 (166) | |
56 | + | |
55 | 57 | /***************************************************************************/ |
56 | 58 | /* I2Cアドレス定義 */ |
57 | 59 | /***************************************************************************/ |
@@ -74,7 +76,7 @@ | ||
74 | 76 | /* 関数定義 */ |
75 | 77 | /***************************************************************************/ |
76 | 78 | //extern __u32 makei2c(void __iomem *, __u32, __u32, __u32, __u32, __u32, __u32); |
77 | -extern int xc3s_init(void __iomem *); | |
79 | +extern int xc3s_init(void __iomem *, int); | |
78 | 80 | extern void SetStream(void __iomem *, __u32, __u32); |
79 | 81 | extern void blockwrite(void __iomem *, WBLOCK *); |
80 | 82 | extern void i2c_write(void __iomem *, struct mutex *, WBLOCK *); |
@@ -4,6 +4,7 @@ | ||
4 | 4 | /* チューナ状態定義 */ |
5 | 5 | /***************************************************************************/ |
6 | 6 | // SLEEPモード設定 |
7 | + | |
7 | 8 | enum { |
8 | 9 | TYPE_SLEEP, |
9 | 10 | TYPE_WAKEUP |
@@ -14,9 +15,15 @@ | ||
14 | 15 | BIT_TUNER, |
15 | 16 | BIT_LNB_UP, |
16 | 17 | BIT_LNB_DOWN, |
17 | - BIT_RESET | |
18 | + BIT_RESET, | |
19 | + BIT_33A1, | |
20 | + BIT_33A2, | |
21 | + BIT_5A_, | |
22 | + BIT_5A1, | |
23 | + BIT_5A2 | |
18 | 24 | }; |
19 | 25 | |
26 | + | |
20 | 27 | // LNBパワー設定 |
21 | 28 | enum{ |
22 | 29 | LNB_OFF, // LNB OFF |
@@ -29,6 +36,11 @@ | ||
29 | 36 | TUNER_POWER_ON_RESET_ENABLE, // オン/イネーブル |
30 | 37 | TUNER_POWER_ON_RESET_DISABLE // オン/ディセーブル |
31 | 38 | }; |
39 | +// Card Type | |
40 | +enum { | |
41 | + PT1, | |
42 | + PT2, | |
43 | +}; | |
32 | 44 | /***************************************************************************/ |
33 | 45 | /* チューナ状態定義 */ |
34 | 46 | /***************************************************************************/ |
@@ -98,8 +110,8 @@ | ||
98 | 110 | /***************************************************************************/ |
99 | 111 | /* チューナ状態定義 */ |
100 | 112 | /***************************************************************************/ |
101 | -extern void settuner_reset(void __iomem *, __u32, __u32); | |
102 | -extern int tuner_init(void __iomem *, struct mutex *, int); | |
113 | +extern void settuner_reset(void __iomem *, __u32, __u32, int); | |
114 | +extern int tuner_init(void __iomem *, struct mutex *, int, int); | |
103 | 115 | extern void set_sleepmode(void __iomem *, struct mutex *, int, int, int); |
104 | 116 | |
105 | 117 | extern int bs_tune(void __iomem *, struct mutex *, int, int, ISDB_S_TMCC *); |
@@ -21,42 +21,49 @@ | ||
21 | 21 | /* 省電力テーブル */ |
22 | 22 | /***************************************************************************/ |
23 | 23 | /* |
24 | -ISDB-Sの省電力設定 | |
25 | - C0 C1 | |
26 | -送信:7Bit Address Mode(1b/19):17:00 | |
27 | -ISDB-Sの省電力無効(2コマンド) | |
28 | - C0 C1 | |
29 | -送信:7Bit Address Mode(1B/19):fe:c0:f0:04 | |
30 | -送信:7Bit Address Mode(1B/19):17:01 | |
24 | +ISDB-S省電力 | |
25 | +送信:7Bit Address Mode(1b):17:01 | |
26 | + | |
27 | +ISDB-S省電力OFF | |
28 | +送信:7Bit Address Mode(1b):fe:c0:e4:fe:c0:f4:d6 | |
29 | +送信:7Bit Address Mode(1b):17:00 | |
31 | 30 | */ |
32 | -WBLOCK isdb_s_wake = { | |
31 | +WBLOCK isdb_s_sleep = { | |
32 | + 0, | |
33 | + 2, | |
34 | + {0x17, 0x01} | |
35 | +}; | |
36 | +WBLOCK isdb_s_wake = { | |
33 | 37 | 0, |
34 | - 4, | |
35 | - {0xFE, 0xC0, 0xF0, 0x04} | |
36 | -}; | |
37 | -WBLOCK isdb_s_sleep = { | |
38 | - 0, | |
39 | - 2, | |
38 | + 7, | |
39 | + {0xFE, 0xC0, 0xE4, 0xFE, 0xC0, 0xF4, 0xD6} | |
40 | +}; | |
41 | +WBLOCK isdb_s_wake2 = { | |
42 | + 0, | |
43 | + 2, | |
40 | 44 | {0x17, 0x00} |
41 | -}; | |
42 | -/* | |
43 | -ISDB-Tの省電力設定 | |
44 | - C0 C1 | |
45 | -送信:7Bit Address Mode(1A/18):03:80 | |
46 | - | |
47 | -ISDB-Tの省電力無効(2コマンド) | |
48 | - C0 C1 | |
49 | -送信:7Bit Address Mode(1A/18):fe:c2 | |
50 | -送信:7Bit Address Mode(1A/18):03:90 | |
45 | +}; | |
46 | + | |
47 | +/* | |
48 | +ISDB-T省電力 | |
49 | +送信:7Bit Address Mode(1a):03:90 | |
50 | + | |
51 | +ISDB-T省電力OFF | |
52 | +送信:7Bit Address Mode(1a):fe:c2:0e:7f:c1:84:80 | |
53 | +送信:7Bit Address Mode(1a):03:80 | |
51 | 54 | */ |
52 | - | |
53 | -WBLOCK isdb_t_wake = { | |
55 | +WBLOCK isdb_t_sleep = { | |
54 | 56 | 0, |
55 | 57 | 2, |
56 | - {0xFE, 0xC2} | |
58 | + {0x03, 0x90} | |
57 | 59 | }; |
58 | -WBLOCK isdb_t_sleep = { | |
60 | +WBLOCK isdb_t_wake = { | |
59 | 61 | 0, |
62 | + 7, | |
63 | + {0xFE, 0xC2, 0x0E, 0x7F, 0xC1, 0x84, 0x80} | |
64 | +}; | |
65 | +WBLOCK isdb_t_wake2 = { | |
66 | + 0, | |
60 | 67 | 2, |
61 | 68 | {0x03, 0x80} |
62 | 69 | }; |
@@ -73,6 +80,12 @@ | ||
73 | 80 | /***************************************************************************/ |
74 | 81 | /* 初期化データ定義(ISDB-S) */ |
75 | 82 | /***************************************************************************/ |
83 | +// ISDB-S初期化値(PT2)1 | |
84 | +WBLOCK isdb_s_init_pt2_1 ={ | |
85 | + 0, | |
86 | + 1, | |
87 | + {0x0f} | |
88 | +}; | |
76 | 89 | // ISDB-S初期化値1 |
77 | 90 | WBLOCK isdb_s_init1 ={ |
78 | 91 | 0, |
@@ -309,24 +322,43 @@ | ||
309 | 322 | /***************************************************************************/ |
310 | 323 | /* 初期化データブロック定義(ISDB-S) */ |
311 | 324 | /***************************************************************************/ |
312 | -WBLOCK *isdb_s_initial[MAX_ISDB_S_INIT] = | |
325 | +WBLOCK *isdb_s_initial[] = | |
313 | 326 | { |
314 | 327 | &isdb_s_init2, &isdb_s_init3, &isdb_s_init4, &isdb_s_init5, |
315 | 328 | &isdb_s_init6, &isdb_s_init7, &isdb_s_init8, &isdb_s_init9, |
316 | 329 | &isdb_s_init10, &isdb_s_init11, &isdb_s_init12, &isdb_s_init13, |
317 | 330 | &isdb_s_init14, &isdb_s_init15, &isdb_s_init16, &isdb_s_init17, |
318 | - &isdb_s_init18, &isdb_s_init19, &isdb_s_init20 | |
331 | + &isdb_s_init18, &isdb_s_init19, &isdb_s_init20, NULL | |
319 | 332 | }; |
333 | +WBLOCK *isdb_s_initial_pt2[] = | |
334 | +{ | |
335 | + &isdb_s_init2, &isdb_s_init4, &isdb_s_init5, | |
336 | + &isdb_s_init6, &isdb_s_init7, &isdb_s_init8, &isdb_s_init9, | |
337 | + &isdb_s_init10, &isdb_s_init11, &isdb_s_init12, &isdb_s_init13, | |
338 | + &isdb_s_init14, &isdb_s_init15, &isdb_s_init16, &isdb_s_init17, | |
339 | + &isdb_s_init18, &isdb_s_init19, &isdb_s_init20, NULL | |
340 | +}; | |
341 | + | |
320 | 342 | /***************************************************************************/ |
321 | 343 | /* 初期化データブロック定義(ISDB-T) */ |
322 | 344 | /***************************************************************************/ |
323 | -WBLOCK *isdb_t_initial[MAX_ISDB_T_INIT] = | |
345 | +WBLOCK *isdb_t_initial[] = | |
324 | 346 | { |
325 | 347 | &isdb_t_init1, &isdb_t_init2, &isdb_t_init3, &isdb_t_init4, |
326 | 348 | &isdb_t_init5, &isdb_t_init6, &isdb_t_init7, &isdb_t_init8, |
327 | 349 | &isdb_t_init9, &isdb_t_init10, &isdb_t_init11, &isdb_t_init12, |
328 | - &isdb_t_init13, &isdb_t_init14, &isdb_t_init15, &isdb_t_init16 | |
350 | + &isdb_t_init13, &isdb_t_init14, &isdb_t_init15, &isdb_t_init16, | |
351 | + NULL | |
329 | 352 | }; |
353 | +WBLOCK *isdb_t_initial_pt2[] = | |
354 | +{ | |
355 | + &isdb_t_init1, &isdb_t_init3, &isdb_t_init4, | |
356 | + &isdb_t_init5, &isdb_t_init6, | |
357 | + &isdb_t_init10, &isdb_t_init11, &isdb_t_init12, | |
358 | + &isdb_t_init13, &isdb_t_init14, &isdb_t_init15, &isdb_t_init16, | |
359 | + NULL | |
360 | +}; | |
361 | + | |
330 | 362 | /***************************************************************************/ |
331 | 363 | /* 地上デジタル用データ */ |
332 | 364 | /***************************************************************************/ |
@@ -1029,7 +1061,7 @@ | ||
1029 | 1061 | /***************************************************************************/ |
1030 | 1062 | /* BS-周波数テーブル */ |
1031 | 1063 | /***************************************************************************/ |
1032 | -WBLOCK_BS_PLL bs_pll[MAX_BS_CHANNEL] = { | |
1064 | +WBLOCK_BS_PLL bs_pll[] = { | |
1033 | 1065 | {&bs_1_step1, &bs_com_step2, &bs_1_step3}, |
1034 | 1066 | {&bs_3_step1, &bs_com_step2, &bs_3_step3}, |
1035 | 1067 | {&bs_5_step1, &bs_com_step2, &bs_5_step3}, |
@@ -1065,7 +1097,8 @@ | ||
1065 | 1097 | {&nd_17_step1, &bs_com_step2, &nd_17_step3}, |
1066 | 1098 | {&nd_19_step1, &bs_com_step2, &nd_19_step3}, |
1067 | 1099 | {&nd_21_step1, &bs_com_step2, &nd_21_step3}, |
1068 | - {&nd_23_step1, &bs_com_step2, &nd_23_step3} | |
1100 | + {&nd_23_step1, &bs_com_step2, &nd_23_step3}, | |
1101 | + {NULL, NULL, NULL} | |
1069 | 1102 | }; |
1070 | 1103 | WBLOCK *bs_get_ts_id[(MAX_BS_TS_ID / 2)] = { |
1071 | 1104 | &bs_get_slot_ts_id_1, |