Mercurial > pt1.oyama
diff driver/pt1_pci.c @ 82:cfb2da5ee428
added LNB reference count to maintain power state during recording.
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 04 Jan 2010 22:49:18 +0900 |
parents | f336fd2dcf28 |
children | 015481a6a900 |
line wrap: on
line diff
--- a/driver/pt1_pci.c Sat Dec 12 22:30:43 2009 +0900 +++ b/driver/pt1_pci.c Mon Jan 04 22:49:18 2010 +0900 @@ -53,6 +53,8 @@ static int debug = 7; /* 1 normal messages, 0 quiet .. 7 verbose. */ static int lnb = 0; /* LNB OFF:0 +11V:1 +15V:2 */ +static int lnb_ref_count = 0; +struct mutex lnb_mutex; module_param(debug, int, 0); module_param(lnb, int, 0); @@ -321,7 +323,6 @@ } static int pt1_open(struct inode *inode, struct file *file) { - int major = imajor(inode); int minor = iminor(inode); int lp ; @@ -523,11 +524,20 @@ case LNB_ENABLE: lnb_usr = (int)arg0; lnb_eff = lnb_usr ? lnb_usr : lnb; + mutex_lock(&lnb_mutex); + lnb_ref_count += 1; settuner_reset(channel->ptr->regs, channel->ptr->cardtype, lnb_eff, TUNER_POWER_ON_RESET_DISABLE); + mutex_unlock(&lnb_mutex); printk(KERN_INFO "PT1:LNB = %s\n", voltage[lnb_eff]); + printk(KERN_INFO "PT1:LNB ref_count = %d\n", lnb_ref_count); return 0 ; case LNB_DISABLE: - settuner_reset(channel->ptr->regs, channel->ptr->cardtype, LNB_OFF, TUNER_POWER_ON_RESET_DISABLE); + mutex_lock(&lnb_mutex); + lnb_ref_count -= 1; + if(!lnb_ref_count) + settuner_reset(channel->ptr->regs, channel->ptr->cardtype, LNB_OFF, TUNER_POWER_ON_RESET_DISABLE); + mutex_unlock(&lnb_mutex); + printk(KERN_INFO "PT1:LNB ref_count = %d\n", lnb_ref_count); return 0 ; } return -EINVAL; @@ -708,6 +718,7 @@ settuner_reset(dev_conf->regs, dev_conf->cardtype, LNB_OFF, TUNER_POWER_ON_RESET_DISABLE); schedule_timeout_interruptible(msecs_to_jiffies(10)); mutex_init(&dev_conf->lock); + mutex_init(&lnb_mutex); // Tuner 初期化処理 for(lp = 0 ; lp < MAX_TUNER ; lp++){