int dmb_init(void) { int result; printk("dmb dmb_init \n"); dmb_hw_setting(); dmb_hw_rst(0, 0); dmb_hw_rst(1, 0); dmb_hw_deinit(); /*misc device registration*/ result = misc_register(&nmi_misc_device); /* nmi i2c init */ nmi625_i2c_init(); dmb_hw_setting_gpio_free(); #ifdef NMI625_HW_CHIP_ID_CHECK nmi625_i2c_read_chip_id(); #endif if(result < 0) return result; return 0; }
int dmb_open (struct inode *inode, struct file *filp) { DMB_OPEN_INFO_T *hOpen = NULL; printk("dmb open\n"); hOpen = (DMB_OPEN_INFO_T *)kmalloc(sizeof(DMB_OPEN_INFO_T), GFP_KERNEL); filp->private_data = hOpen; oneseg_power(1); nmi625_i2c_init(); return 0; }
int dmb_init(void *hal) { int result; printk("dmb dmb_init \n"); #if 0 // Lewis #ifndef REWORK_TEST if(!(Project_DMT <=fih_read_product_id_from_orighwid() && fih_read_product_id_from_orighwid() <=Project_DMT)){ printk("%s(): non-DTV HW, return\n",__func__ ); return -ENODEV; } #endif #endif // dmb_hw_setting(); #ifdef NMI_TEST //def NMI625_HW_CHIP_ID_CHECK for testing dmb_hw_rst(0, 0); mdelay(100); dmb_hw_rst(0, 1); mdelay(100); #else dmb_hw_rst(0, 0); dmb_hw_deinit(); #endif /*misc device registration*/ result = misc_register(&nmi_misc_device); // /* nmi i2c init */ nmi625_i2c_init(); #ifdef NMI_TEST //def NMI625_HW_CHIP_ID_CHECK for testing nmi625_i2c_read_chip_id(); #else dmb_hw_setting_gpio_free(); #endif if(result < 0) return result; return 0; }
long dmb_ioctl (struct file *filp, unsigned int cmd, unsigned long arg) { long res = 1; ioctl_info info; int err = 0, size; if(_IOC_TYPE(cmd) != IOCTL_MAGIC) return -EINVAL; if(_IOC_NR(cmd) >= IOCTL_MAXNR) return -EINVAL; size = _IOC_SIZE(cmd); if(size) { if(_IOC_DIR(cmd) & _IOC_READ) err = access_ok(VERIFY_WRITE, (void *) arg, size); else if(_IOC_DIR(cmd) & _IOC_WRITE) err = access_ok(VERIFY_READ, (void *) arg, size); if(!err) { printk("%s : Wrong argument! cmd(0x%08x) _IOC_NR(%d) _IOC_TYPE(0x%x) _IOC_SIZE(%d) _IOC_DIR(0x%x)\n", __FUNCTION__, cmd, _IOC_NR(cmd), _IOC_TYPE(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd)); return err; } } switch(cmd) { case IOCTL_DMB_RESET: if (copy_from_user(&info, (void *)arg, size)) return -EFAULT; printk("DMB_RESET enter.., info.buf[0] %d, info.buf[1] %d\n", info.buf[0], info.buf[1]); dmb_hw_rst(info.buf[0], info.buf[1]); break; case IOCTL_DMB_INIT: nmi625_i2c_init(); break; case IOCTL_DMB_BYTE_READ: break; case IOCTL_DMB_WORD_READ: break; case IOCTL_DMB_LONG_READ: break; case IOCTL_DMB_BULK_READ: if (copy_from_user(&info, (void *)arg, size)) return -EFAULT; res = nmi625_i2c_read(0, (u16)info.dev_addr, (u8 *)(info.buf), info.size); if (copy_to_user((void *)arg, (void *)&info, size)) return -EFAULT; break; case IOCTL_DMB_BYTE_WRITE: break; case IOCTL_DMB_WORD_WRITE: break; case IOCTL_DMB_LONG_WRITE: break; case IOCTL_DMB_BULK_WRITE: if (copy_from_user(&info, (void *)arg, size)) return -EFAULT; nmi625_i2c_write(0, (u16)info.dev_addr, (u8 *)(info.buf), info.size); break; case IOCTL_DMB_TUNER_SELECT: break; case IOCTL_DMB_TUNER_READ: break; case IOCTL_DMB_TUNER_WRITE: break; case IOCTL_DMB_TUNER_SET_FREQ: break; case IOCTL_DMB_POWER_ON: printk("DMB_POWER_ON enter..\n"); dmb_hw_init(); break; case IOCTL_DMB_POWER_OFF: printk("DMB_POWER_OFF enter..\n"); dmb_hw_deinit(); break; case IOCTL_DMB_ANTENNA_SELECT: printk("DMB_ANTENNA_SELECT enter..\n"); if (copy_from_user(&info, (void *)arg, size)) return -EFAULT; if (info.buf[0] > 0X0F) { printk("DMB_ANTENNA_SELECT: select antenna %d > 0X0F !!!\n", info.buf[0]); return -EFAULT; } oneseg_select_antenna(info.buf[0]); break; default: printk("dmb_ioctl : Undefined ioctl command\n"); res = 1; break; } return res; }
long dmb_ioctl (struct file *filp, unsigned int cmd, unsigned long arg) { long res = 1; ioctl_info info; int err = 0, size = 0; // printk("%s : type(%c), nr(%x) \n",__func__ , _IOC_TYPE(cmd), _IOC_NR(cmd)); if(_IOC_TYPE(cmd) != IOCTL_MAGIC) return -EINVAL; if(_IOC_NR(cmd) >= IOCTL_MAXNR) return -EINVAL; size = _IOC_SIZE(cmd); // printk("%s : size(%d)\n", __func__, size); if(size) { if(_IOC_DIR(cmd) & _IOC_READ) err = access_ok(VERIFY_WRITE, (void *) arg, size); else if(_IOC_DIR(cmd) & _IOC_WRITE) err = access_ok(VERIFY_READ, (void *) arg, size); if(!err) { printk("%s : Wrong argument! cmd(0x%08x) _IOC_NR(%d) _IOC_TYPE(0x%x) _IOC_SIZE(%d) _IOC_DIR(0x%x)\n", __FUNCTION__, cmd, _IOC_NR(cmd), _IOC_TYPE(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd)); return err; } } switch(cmd) { case IOCTL_DMB_RESET: res = copy_from_user((void *)&info, (void *)arg, size); // reset the chip with the info[0], if info[0] is zero then isdbt reset, // if info[0] is one then atv reset. printk("IOCTL_DMB_RESET enter.., info.buf[0] %d, info.buf[1] %d\n", info.buf[0], info.buf[1]); dmb_hw_rst(info.buf[0], info.buf[1]); break; case IOCTL_DMB_INIT: nmi625_i2c_init(); break; case IOCTL_DMB_BYTE_READ: break; case IOCTL_DMB_WORD_READ: break; case IOCTL_DMB_LONG_READ: break; case IOCTL_DMB_BULK_READ: res = copy_from_user((void *)&info, (void *)arg, size); res = nmi625_i2c_read(0, (u16)info.dev_addr, (u8 *)(info.buf), info.size); res = copy_to_user((void *)arg, (void *)&info, size); break; case IOCTL_DMB_BYTE_WRITE: //copy_from_user((void *)&info, (void *)arg, size); //res = BBM_BYTE_WRITE(0, (u16)info.buff[0], (u8)info.buff[1]); break; case IOCTL_DMB_WORD_WRITE: break; case IOCTL_DMB_LONG_WRITE: break; case IOCTL_DMB_BULK_WRITE: res = copy_from_user((void *)&info, (void *)arg, size); nmi625_i2c_write(0, (u16)info.dev_addr, (u8 *)(info.buf), info.size); break; case IOCTL_DMB_TUNER_SELECT: break; case IOCTL_DMB_TUNER_READ: break; case IOCTL_DMB_TUNER_WRITE: break; case IOCTL_DMB_TUNER_SET_FREQ: break; case IOCTL_DMB_POWER_ON: printk("DMB_POWER_ON enter..\n"); dmb_hw_init(); break; case IOCTL_DMB_POWER_OFF: printk("DMB_POWER_OFF enter..\n"); //nmi_i2c_deinit(NULL); dmb_hw_deinit(); break; /* FIH, Chandler, add for ftm support { */ case IOCTL_DMB_FTM_CHIPID: gpio_direction_output(gpio_isdbt_rstn,0); mdelay(50); gpio_direction_output(gpio_isdbt_rstn,1); mdelay(100); res = copy_from_user((void *)&info, (void *)arg, size); nmi625_i2c_ftm_chip_id((u8 *)(info.buf), info.size); res = copy_to_user((void *)arg, (void *)&info, size); break; /* FIH, Chandler, add for ftm support } */ default: printk("dmb_ioctl : Undefined ioctl command\n"); res = 1; break; } return res; }
int dmb_ioctl (struct file *filp, unsigned int cmd, unsigned long arg) { long res = 1; ioctl_info info; int err, size; if(_IOC_TYPE(cmd) != IOCTL_MAGIC) return -EINVAL; if(_IOC_NR(cmd) >= IOCTL_MAXNR) return -EINVAL; mutex_lock(&nmi625_mutex); size = _IOC_SIZE(cmd); if(size) { if(_IOC_DIR(cmd) & _IOC_READ) err = access_ok(VERIFY_WRITE, (void *) arg, size); else if(_IOC_DIR(cmd) & _IOC_WRITE) err = access_ok(VERIFY_READ, (void *) arg, size); if(!err) { printk("%s : Wrong argument! cmd(0x%08x) _IOC_NR(%d) _IOC_TYPE(0x%x) _IOC_SIZE(%d) _IOC_DIR(0x%x)\n", __FUNCTION__, cmd, _IOC_NR(cmd), _IOC_TYPE(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd)); mutex_unlock(&nmi625_mutex); return err; } } switch(cmd) { case IOCTL_DMB_RESET: copy_from_user((void *)&info, (void *)arg, size); // reset the chip with the info[0], if info[0] is zero then isdbt reset, // if info[0] is one then atv reset. printk("IOCTL_DMB_RESET enter.., info.buf[0] %d, info.buf[1] %d\n", info.buf[0], info.buf[1]); dmb_hw_rst(info.buf[0], info.buf[1]); break; case IOCTL_DMB_INIT: nmi625_i2c_init(); break; case IOCTL_DMB_BYTE_READ: break; case IOCTL_DMB_WORD_READ: break; case IOCTL_DMB_LONG_READ: break; case IOCTL_DMB_BULK_READ: copy_from_user((void *)&info, (void *)arg, size); res = nmi625_i2c_read(0, (u16)info.dev_addr, (u8 *)(info.buf), info.size); copy_to_user((void *)arg, (void *)&info, size); break; case IOCTL_DMB_BYTE_WRITE: //copy_from_user((void *)&info, (void *)arg, size); //res = BBM_BYTE_WRITE(0, (u16)info.buff[0], (u8)info.buff[1]); break; case IOCTL_DMB_WORD_WRITE: break; case IOCTL_DMB_LONG_WRITE: break; case IOCTL_DMB_BULK_WRITE: copy_from_user((void *)&info, (void *)arg, size); nmi625_i2c_write(0, (u16)info.dev_addr, (u8 *)(info.buf), info.size); break; case IOCTL_DMB_TUNER_SELECT: break; case IOCTL_DMB_TUNER_READ: break; case IOCTL_DMB_TUNER_WRITE: break; case IOCTL_DMB_TUNER_SET_FREQ: break; case IOCTL_DMB_POWER_ON: printk("DMB_POWER_ON enter..\n"); dmb_hw_init(); break; case IOCTL_DMB_POWER_OFF: printk("DMB_POWER_OFF enter..\n"); //nmi_i2c_deinit(NULL); dmb_hw_deinit(); break; default: printk("dmb_ioctl : Undefined ioctl command\n"); res = 1; break; } mutex_unlock(&nmi625_mutex); return res; }