低功耗问题
我们用了一颗MCU,待机时通过它切断主板电源。
由于采用的是silicon tuner,为了保证其在待机状态下的loop through性能,
需要继续给tuner模块供电,同时为了保证总功耗低于1W,要求置tuner于待机模式,即关闭pll.
从linux/drivers/media/dvb/dvb-core/dvb_frontend.c
函数: dvb_frontend_thread()
看出:我们关闭所有打开的frontend文件句柄,将退出该thread,并且调用tuner的sleep函数。
但是:我们不知道是否其它模块有打开frontend文件,更重要的是,我们希望close frontend文件描述符后,tuner 进入standby会立即生效,因为我们需要通过MCU切断主板电源。
鉴于这些问题的存在,最后决定通过ioctl实现。
即:
在相同的文件函数dvb_frontend_ioctl(),
case FE_SET_LOWPOWER_MODE:
if (fe->ops.tuner_ops.sleep) {
fe->ops.tuner_ops.sleep(fe);
}
这样,在切断主板电源之前,通过该ioctl让tuner进入standby.
我们用了一颗MCU,待机时通过它切断主板电源。
由于采用的是silicon tuner,为了保证其在待机状态下的loop through性能,
需要继续给tuner模块供电,同时为了保证总功耗低于1W,要求置tuner于待机模式,即关闭pll.
从linux/drivers/media/dvb/dvb-core/dvb_frontend.c
函数: dvb_frontend_thread()
看出:我们关闭所有打开的frontend文件句柄,将退出该thread,并且调用tuner的sleep函数。
但是:我们不知道是否其它模块有打开frontend文件,更重要的是,我们希望close frontend文件描述符后,tuner 进入standby会立即生效,因为我们需要通过MCU切断主板电源。
鉴于这些问题的存在,最后决定通过ioctl实现。
即:
在相同的文件函数dvb_frontend_ioctl(),
case FE_SET_LOWPOWER_MODE:
if (fe->ops.tuner_ops.sleep) {
fe->ops.tuner_ops.sleep(fe);
}
这样,在切断主板电源之前,通过该ioctl让tuner进入standby.
转载于:https://blog.51cto.com/jiangjqian/307820