Mercurial > pt1.oyama
changeset 79:3c2123189edf
improve PT2 support.
- update read check in initialization
- PT2 specific RAM phase initialization
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 07 Dec 2009 15:01:57 +0900 |
parents | 5a0126d8af17 |
children | f336fd2dcf28 |
files | driver/pt1_i2c.c driver/pt1_i2c.h driver/pt1_pci.c driver/pt1_tuner.c driver/pt1_tuner_data.c |
diffstat | 5 files changed, 30 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/driver/pt1_i2c.c Tue Dec 01 20:24:22 2009 +0900 +++ b/driver/pt1_i2c.c Mon Dec 07 15:01:57 2009 +0900 @@ -17,6 +17,7 @@ #include "pt1_com.h" #include "pt1_i2c.h" #include "pt1_pci.h" +#include "pt1_tuner.h" #define PROGRAM_ADDRESS 1024 static int state = STATE_STOP ; @@ -40,12 +41,13 @@ writel(val, regs + FIFO_ADDR); } -int xc3s_init(void __iomem *regs) +int xc3s_init(void __iomem *regs, int cardtype) { __u32 val ; int lp ; int rc ; + int phase = XC3S_PCI_CLOCK; /* val = (1 << 19) | (1 << 27) | (1 << 16) | (1 << 24) | (1 << 17) | (1 << 25); @@ -98,7 +100,15 @@ if(rc){ return -EIO ; } - for(lp = 0 ; lp < XC3S_PCI_CLOCK ; lp++){ + switch(cardtype) { + case PT1: + phase = XC3S_PCI_CLOCK; + break; + case PT2: + phase = XC3S_PCI_CLOCK_PT2; + break; + } + for(lp = 0; lp < phase; lp++){ rc = i2c_lock_one(regs, WRITE_RAM_ENABLE, RAM_SHIFT); if(rc < 0){ printk(KERN_ERR "PT1:LOCK FALUT\n");
--- a/driver/pt1_i2c.h Tue Dec 01 20:24:22 2009 +0900 +++ b/driver/pt1_i2c.h Mon Dec 07 15:01:57 2009 +0900 @@ -52,6 +52,7 @@ #define READ_UNLOCK (1 << 31) #define XC3S_PCI_CLOCK (512 / 4) +#define XC3S_PCI_CLOCK_PT2 (166) /***************************************************************************/ /* I2Cアドレス定義 */ /***************************************************************************/ @@ -74,7 +75,7 @@ /* 関数定義 */ /***************************************************************************/ //extern __u32 makei2c(void __iomem *, __u32, __u32, __u32, __u32, __u32, __u32); -extern int xc3s_init(void __iomem *); +extern int xc3s_init(void __iomem *, int); extern void SetStream(void __iomem *, __u32, __u32); extern void blockwrite(void __iomem *, WBLOCK *); extern void i2c_write(void __iomem *, struct mutex *, WBLOCK *);
--- a/driver/pt1_pci.c Tue Dec 01 20:24:22 2009 +0900 +++ b/driver/pt1_pci.c Mon Dec 07 15:01:57 2009 +0900 @@ -686,17 +686,17 @@ dev_conf->mmio_len = pci_resource_len(pdev, 0); dummy = request_mem_region(dev_conf->mmio_start, dev_conf->mmio_len, DEV_NAME); if (!dummy) { - printk(KERN_ERR "PT1: cannot request iomem (0x%llx).\n", (unsigned long long) dev_conf->mmio_start); + printk(KERN_ERR "PT1:cannot request iomem (0x%llx).\n", (unsigned long long) dev_conf->mmio_start); goto out_err_regbase; } dev_conf->regs = ioremap(dev_conf->mmio_start, dev_conf->mmio_len); if (!dev_conf->regs){ - printk(KERN_ERR "pt1: Can't remap register area.\n"); + printk(KERN_ERR "pt1:Can't remap register area.\n"); goto out_err_regbase; } // 初期化処理 - if(xc3s_init(dev_conf->regs)){ + if(xc3s_init(dev_conf->regs, dev_conf->cardtype)){ printk(KERN_ERR "Error xc3s_init\n"); goto out_err_fpga; } @@ -734,7 +734,7 @@ minor = MINOR(dev_conf->dev) ; dev_conf->base_minor = minor ; for(lp = 0 ; lp < MAX_PCI_DEVICE ; lp++){ - printk(KERN_INFO "PT1: device[%d]=%p\n", lp, device[lp]); + printk(KERN_INFO "PT1:device[%d]=%p\n", lp, device[lp]); if(device[lp] == NULL){ device[lp] = dev_conf ; dev_conf->card_number = lp; @@ -785,7 +785,7 @@ goto out_err_v4l; } #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) - printk(KERN_INFO "PT1: card_number = %d\n", + printk(KERN_INFO "PT1:card_number = %d\n", dev_conf->card_number); device_create(pt1video_class, NULL,
--- a/driver/pt1_tuner.c Tue Dec 01 20:24:22 2009 +0900 +++ b/driver/pt1_tuner.c Mon Dec 07 15:01:57 2009 +0900 @@ -106,20 +106,24 @@ memcpy(&wk, &isdb_s_init1, sizeof(WBLOCK)); wk.addr = addr; val = i2c_read(regs, lock, &wk, 1); - if((val & 0xff) != 0x41){ - printk(KERN_INFO "PT1:ISDB-S Read(%x)\n", val); - return -EIO ; - } if(cardtype == PT1) { - for(lp = 0 ; lp < PT1_MAX_ISDB_S_INIT ; lp++){ + if((val & 0xff) != 0x4c) { + printk(KERN_INFO "PT1:ISDB-S Read(%x)\n", val); + return -EIO ; + } + for(lp = 0 ; lp < PT1_MAX_ISDB_S_INIT ; lp++) { memcpy(&wk, isdb_s_initial_pt1[lp], sizeof(WBLOCK)); wk.addr = addr; i2c_write(regs, lock, &wk); } } else if(cardtype == PT2) { - for(lp = 0 ; lp < PT2_MAX_ISDB_S_INIT ; lp++){ + if((val & 0xff) != 0x52) { + printk(KERN_INFO "PT2:ISDB-S Read(%x)\n", val); + return -EIO ; + } + for(lp = 0 ; lp < PT2_MAX_ISDB_S_INIT ; lp++) { memcpy(&wk, isdb_s_initial_pt2[lp], sizeof(WBLOCK)); wk.addr = addr; i2c_write(regs, lock, &wk);
--- a/driver/pt1_tuner_data.c Tue Dec 01 20:24:22 2009 +0900 +++ b/driver/pt1_tuner_data.c Mon Dec 07 15:01:57 2009 +0900 @@ -77,7 +77,7 @@ WBLOCK isdb_s_init1 ={ 0, 1, - {0x07} + {0x0f} }; // ISDB-S初期化値2 WBLOCK isdb_s_init2 ={ @@ -85,7 +85,6 @@ 2, {0x04, 0x02} }; - // ISDB-S初期化値3 WBLOCK isdb_s_init3 ={ 0,