提交 26f48eaa 编写于 作者: M Michael Krufky 提交者: Mauro Carvalho Chehab

V4L/DVB (5131): M920x: more cleanups

Some cleanups and suggestions from Patrick Boettcher.
Dropped the mutex in m9206_rc_query using #if 0, because
M9206_CORE, M9206_I2C, M9206_FILTER and M9206_FW can be accessed
concurrently.
Thanks to both Aapo Tahkola and Patrick Boettcher.
Signed-off-by: NMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 e2adbecf
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "qt1010.h" #include "qt1010.h"
/* debug */ /* debug */
int dvb_usb_m920x_debug; static int dvb_usb_m920x_debug;
module_param_named(debug,dvb_usb_m920x_debug, int, 0644); module_param_named(debug,dvb_usb_m920x_debug, int, 0644);
MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS);
...@@ -85,8 +85,6 @@ static int m9206_rc_query(struct dvb_usb_device *d, u32 *event, int *state) ...@@ -85,8 +85,6 @@ static int m9206_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
int i, ret = 0; int i, ret = 0;
u8 rc_state[2]; u8 rc_state[2];
if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
return -EAGAIN;
if ((ret = m9206_read(d->udev, M9206_CORE, 0x0, M9206_RC_STATE, rc_state, 1)) != 0) if ((ret = m9206_read(d->udev, M9206_CORE, 0x0, M9206_RC_STATE, rc_state, 1)) != 0)
goto unlock; goto unlock;
...@@ -128,7 +126,6 @@ static int m9206_rc_query(struct dvb_usb_device *d, u32 *event, int *state) ...@@ -128,7 +126,6 @@ static int m9206_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
*state = REMOTE_NO_KEY_PRESSED; *state = REMOTE_NO_KEY_PRESSED;
unlock: unlock:
mutex_unlock(&d->i2c_mutex);
return ret; return ret;
} }
...@@ -240,8 +237,6 @@ static int megasky_mt352_demod_init(struct dvb_frontend *fe) ...@@ -240,8 +237,6 @@ static int megasky_mt352_demod_init(struct dvb_frontend *fe)
return 0; return 0;
} }
struct mt352_state;
static struct mt352_config megasky_mt352_config = { static struct mt352_config megasky_mt352_config = {
.demod_address = 0x1e, .demod_address = 0x1e,
.no_tuner = 1, .no_tuner = 1,
...@@ -267,52 +262,7 @@ static int megasky_tuner_attach(struct dvb_usb_adapter *adap) ...@@ -267,52 +262,7 @@ static int megasky_tuner_attach(struct dvb_usb_adapter *adap)
return 0; return 0;
} }
/* DVB USB Driver stuff */ static int m9206_set_filter(struct dvb_usb_adapter *adap, int type, int idx, int pid)
static struct dvb_usb_device_properties megasky_properties;
static int m920x_probe(struct usb_interface *intf, const struct usb_device_id *id)
{
struct usb_device *udev = interface_to_usbdev(intf);
struct dvb_usb_device *d;
struct usb_host_interface *alt;
struct dvb_usb_device_properties props;
int ret;
memcpy(&props, &megasky_properties, sizeof(struct dvb_usb_device_properties));
/* Hardware pid filtering isn't quite perfect so dont use unless have to. */
if (udev->speed == USB_SPEED_FULL)
props.caps |= DVB_USB_ADAP_HAS_PID_FILTER |
DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF;
if ((ret = dvb_usb_device_init(intf, &props, THIS_MODULE, &d)) == 0) {
deb_rc("probed!\n");
alt = usb_altnum_to_altsetting(intf, 1);
if (alt == NULL) {
deb_rc("not alt found!\n");
return -ENODEV;
}
ret = usb_set_interface(d->udev, alt->desc.bInterfaceNumber, alt->desc.bAlternateSetting);
if (ret < 0)
return ret;
deb_rc("Changed to alternate setting!\n");
if ((ret = m9206_rc_init(d->udev)) != 0)
return ret;
}
return ret;
}
static struct usb_device_id m920x_table [] = {
{ USB_DEVICE(USB_VID_MSI, USB_PID_MSI_MEGASKY580) },
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE (usb, m920x_table);
static int set_filter(struct dvb_usb_adapter *adap, int type, int idx, int pid)
{ {
int ret = 0; int ret = 0;
...@@ -341,14 +291,14 @@ static int m9206_update_filters(struct dvb_usb_adapter *adap) ...@@ -341,14 +291,14 @@ static int m9206_update_filters(struct dvb_usb_adapter *adap)
enabled = 0; enabled = 0;
/* Disable all filters */ /* Disable all filters */
if ((ret = set_filter(adap, 0x81, 1, enabled)) != 0) if ((ret = m9206_set_filter(adap, 0x81, 1, enabled)) != 0)
return ret; return ret;
for (i = 0; i < M9206_MAX_FILTERS; i++) for (i = 0; i < M9206_MAX_FILTERS; i++)
if ((ret = set_filter(adap, 0x81, i + 2, 0)) != 0) if ((ret = m9206_set_filter(adap, 0x81, i + 2, 0)) != 0)
return ret; return ret;
if ((ret = set_filter(adap, 0x82, 0, 0x0)) != 0) if ((ret = m9206_set_filter(adap, 0x82, 0, 0x0)) != 0)
return ret; return ret;
/* Set */ /* Set */
...@@ -357,14 +307,14 @@ static int m9206_update_filters(struct dvb_usb_adapter *adap) ...@@ -357,14 +307,14 @@ static int m9206_update_filters(struct dvb_usb_adapter *adap)
if (m->filters[i] == 0) if (m->filters[i] == 0)
continue; continue;
if ((ret = set_filter(adap, 0x81, filter + 2, m->filters[i])) != 0) if ((ret = m9206_set_filter(adap, 0x81, filter + 2, m->filters[i])) != 0)
return ret; return ret;
filter++; filter++;
} }
} }
if ((ret = set_filter(adap, 0x82, 0, 0x02f5)) != 0) if ((ret = m9206_set_filter(adap, 0x82, 0, 0x02f5)) != 0)
return ret; return ret;
return ret; return ret;
...@@ -450,6 +400,42 @@ static int m9206_firmware_download(struct usb_device *udev, const struct firmwar ...@@ -450,6 +400,42 @@ static int m9206_firmware_download(struct usb_device *udev, const struct firmwar
return ret; return ret;
} }
/* DVB USB Driver stuff */
static struct dvb_usb_device_properties megasky_properties;
static int m920x_probe(struct usb_interface *intf, const struct usb_device_id *id)
{
struct dvb_usb_device *d;
struct usb_host_interface *alt;
int ret;
if ((ret = dvb_usb_device_init(intf, &megasky_properties, THIS_MODULE, &d)) == 0) {
deb_rc("probed!\n");
alt = usb_altnum_to_altsetting(intf, 1);
if (alt == NULL) {
deb_rc("not alt found!\n");
return -ENODEV;
}
ret = usb_set_interface(d->udev, alt->desc.bInterfaceNumber, alt->desc.bAlternateSetting);
if (ret < 0)
return ret;
deb_rc("Changed to alternate setting!\n");
if ((ret = m9206_rc_init(d->udev)) != 0)
return ret;
}
return ret;
}
static struct usb_device_id m920x_table [] = {
{ USB_DEVICE(USB_VID_MSI, USB_PID_MSI_MEGASKY580) },
{ } /* Terminating entry */
};
MODULE_DEVICE_TABLE (usb, m920x_table);
static struct dvb_usb_device_properties megasky_properties = { static struct dvb_usb_device_properties megasky_properties = {
.usb_ctrl = DEVICE_SPECIFIC, .usb_ctrl = DEVICE_SPECIFIC,
.firmware = "dvb-usb-megasky-02.fw", .firmware = "dvb-usb-megasky-02.fw",
...@@ -465,7 +451,9 @@ static struct dvb_usb_device_properties megasky_properties = { ...@@ -465,7 +451,9 @@ static struct dvb_usb_device_properties megasky_properties = {
.identify_state = megasky_identify_state, .identify_state = megasky_identify_state,
.num_adapters = 1, .num_adapters = 1,
.adapter = {{ .adapter = {{
.caps = DVB_USB_IS_AN_I2C_ADAPTER, .caps = DVB_USB_IS_AN_I2C_ADAPTER | DVB_USB_ADAP_HAS_PID_FILTER |
DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
.pid_filter_count = 8, .pid_filter_count = 8,
.pid_filter = m9206_pid_filter, .pid_filter = m9206_pid_filter,
.pid_filter_ctrl = m9206_pid_filter_ctrl, .pid_filter_ctrl = m9206_pid_filter_ctrl,
......
...@@ -4,15 +4,14 @@ ...@@ -4,15 +4,14 @@
#define DVB_USB_LOG_PREFIX "m920x" #define DVB_USB_LOG_PREFIX "m920x"
#include "dvb-usb.h" #include "dvb-usb.h"
extern int dvb_usb_m920x_debug;
#define deb_rc(args...) dprintk(dvb_usb_m920x_debug,0x01,args) #define deb_rc(args...) dprintk(dvb_usb_m920x_debug,0x01,args)
#define M9206_CORE 0x22 #define M9206_CORE 0x22
#define M9206_RC_STATE 0xff51 #define M9206_RC_STATE 0xff51
#define M9206_RC_KEY 0xff52 #define M9206_RC_KEY 0xff52
#define M9206_RC_INIT1 0xff54 #define M9206_RC_INIT1 0xff54
#define M9206_RC_INIT2 0xff55 #define M9206_RC_INIT2 0xff55
#define M9206_FW_GO 0xff69 #define M9206_FW_GO 0xff69
#define M9206_I2C 0x23 #define M9206_I2C 0x23
#define M9206_FILTER 0x25 #define M9206_FILTER 0x25
...@@ -24,5 +23,4 @@ struct m9206_state { ...@@ -24,5 +23,4 @@ struct m9206_state {
int filtering_enabled; int filtering_enabled;
int rep_count; int rep_count;
}; };
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册