#include "af903x.h" static int dvb_usb_af903x_disable_rc = 1; module_param_named(disable_rc, dvb_usb_af903x_disable_rc, int, 0644); MODULE_PARM_DESC(disable_rc, "disable rc"); bool DevicePower; static int af903x_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff) { int ret =0; deb_data("%s: onoff:%d\n", __func__, onoff); if ( PDC->fc[adap->id].bEnPID != onoff ) DL_ResetPID((BYTE)adap->id); PDC->fc[adap->id].bEnPID = onoff; DL_PIDOnOff((BYTE)adap->id,onoff); return ret; } static int af903x_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pidnum, int onoff) { int ret = 0; Pid pid; deb_data("- %s: set pid filter, index %d, pid %x, onoff %d, now_onoff %d.\n", __func__, index, pidnum, onoff, PDC->fc[adap->id].bEnPID); if (onoff && !PDC->fc[adap->id].bEnPID) { DL_ResetPID((BYTE)adap->id); PDC->fc[adap->id].bEnPID = onoff; DL_PIDOnOff((BYTE)adap->id,onoff); pid.sectionType = SectionType_TABLE; pid.table = 0x00; pid.duration = 0xFF; } pid.value = (Word)pidnum; if (onoff){ ret = DL_AddPID((BYTE)adap->id, index, pid); }else{ ret = DL_RemovePID((BYTE)adap->id, index, pid); } return ret; } static int af903x_download_firmware(struct usb_device *udev, const struct firmware *fw) { int ret=0; deb_data("- Enter %s Function -\n",__FUNCTION__); return ret; } static int af903x_powerctrl(struct dvb_usb_device *d, int onoff) { int ret; DevicePower = onoff; deb_data("- Enter %s Function - chip=%d:%s\n",__FUNCTION__, d->adapter->id, onoff?"ON":"OFF"); ret = DL_ApCtrl(d->adapter->id, onoff); if(ret) deb_data(" af903x_powerctrl Fail: 0x%04X\n", ret); return ret; } static int af903x_identify_state(struct usb_device *udev, struct dvb_usb_device_properties *props, struct dvb_usb_device_description **desc, int *cold) { deb_data("- Enter %s Function -\n",__FUNCTION__); *cold = 0; return 0; } static int af903x_frontend_attach(struct dvb_usb_adapter *adap) { deb_data("- Enter %s Function - chip=%d\n", __FUNCTION__, adap->id); adap->fe_adap[0].fe = af903x_attach(1); return adap->fe_adap[0].fe == NULL ? -ENODEV : 0; } static int af903x_tuner_attach(struct dvb_usb_adapter *adap) { deb_data("- Enter %s Function - chip=%d\n",__FUNCTION__, adap->id); tuner_attach(adap->fe_adap[0].fe); return 0; } static int af903x_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) { deb_data("- Enter %s Function - (%s) streaming state for chip=%d\n",__FUNCTION__, onoff?"ON":"OFF", adap->id); //PID off DL_ResetPID((BYTE)adap->id); PDC->fc[adap->id].bEnPID = 0; DL_PIDOnOff((BYTE)adap->id,0); return 0; } struct usb_device_id af903x_usb_id_table[] = { { USB_DEVICE(0x15A4,0x1000) }, { USB_DEVICE(0x15A4,0x1001) }, { USB_DEVICE(0x15A4,0x1002) }, { USB_DEVICE(0x15A4,0x1003) }, { USB_DEVICE(0x15A4,0x9035) }, { USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3100MINI) }, { 0}, /* Terminating entry */ }; MODULE_DEVICE_TABLE(usb, af903x_usb_id_table); struct dvb_usb_device_properties af903x_properties[] = {{ .usb_ctrl = DEVICE_SPECIFIC, .download_firmware = af903x_download_firmware, .no_reconnect = 1, .power_ctrl = af903x_powerctrl, .identify_state = af903x_identify_state, .num_adapters = 2, .adapter = { { .num_frontends = 1, .fe = {{ .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_NEED_PID_FILTERING | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF, .pid_filter_count = 32, .pid_filter = af903x_pid_filter, .pid_filter_ctrl = af903x_pid_filter_ctrl, .frontend_attach = af903x_frontend_attach, .tuner_attach = af903x_tuner_attach, .streaming_ctrl = af903x_streaming_ctrl, .stream = { .type = USB_BULK, .count = 4, .endpoint = 0x84, .u = { .bulk = { .buffersize = 65424, } } } }}, }, { .num_frontends = 1, .fe = {{ .caps = DVB_USB_ADAP_HAS_PID_FILTER | DVB_USB_ADAP_NEED_PID_FILTERING | DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF, .pid_filter_count = 32, .pid_filter = af903x_pid_filter, .pid_filter_ctrl = af903x_pid_filter_ctrl, .frontend_attach = af903x_frontend_attach, .tuner_attach = af903x_tuner_attach, .streaming_ctrl = af903x_streaming_ctrl, .stream = { .type = USB_BULK, .count = 4, .endpoint = 0x85, .u = { .bulk = { .buffersize = 65424, } } } }}, }, }, // .rc.core = { // .protocol = RC_TYPE_NEC, // .module_name = "af903x", // .rc_query = af903x_rc_query, // .rc_interval = AF903X_POLL, // .allowed_protos = RC_TYPE_NEC, // .rc_codes = NULL, /* will be set in // af903x_identify_state */ // }, .num_device_descs = 2, .devices = { {"ITEtech USB2.0 DVB-T Receiver", {&af903x_usb_id_table[0], &af903x_usb_id_table[1], &af903x_usb_id_table[2], &af903x_usb_id_table[3], &af903x_usb_id_table[4], NULL}, {NULL}, }, {"Asus U3100MINI_PLUS/T/RC Receiver", {&af903x_usb_id_table[5], NULL}, {NULL}, }, {NULL}, } }}; int af903x_device_count = ARRAY_SIZE(af903x_properties);