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

V4L/DVB (8280): sms1xxx: more codingstyle cleanups

Signed-off-by: NMichael Krufky <mkrufky@linuxtv.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@infradead.org>
上级 73104fb3
...@@ -34,47 +34,49 @@ int smsdvb_onresponse(void *context, smscore_buffer_t *cb) ...@@ -34,47 +34,49 @@ int smsdvb_onresponse(void *context, smscore_buffer_t *cb)
smsdvb_client_t *client = (smsdvb_client_t *) context; smsdvb_client_t *client = (smsdvb_client_t *) context;
SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *)(((u8 *) cb->p) + cb->offset); SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *)(((u8 *) cb->p) + cb->offset);
switch(phdr->msgType) switch(phdr->msgType) {
{ case MSG_SMS_DVBT_BDA_DATA:
case MSG_SMS_DVBT_BDA_DATA: dvb_dmx_swfilter(&client->demux, (u8 *)(phdr + 1),
dvb_dmx_swfilter(&client->demux, (u8 *)(phdr + 1), cb->size - sizeof(SmsMsgHdr_ST));
cb->size - sizeof(SmsMsgHdr_ST)); break;
break;
case MSG_SMS_RF_TUNE_RES:
complete(&client->tune_done);
break;
case MSG_SMS_RF_TUNE_RES: case MSG_SMS_GET_STATISTICS_RES:
complete(&client->tune_done); {
break; SmsMsgStatisticsInfo_ST *p =
(SmsMsgStatisticsInfo_ST *)(phdr + 1);
case MSG_SMS_GET_STATISTICS_RES: if (p->Stat.IsDemodLocked)
{ {
SmsMsgStatisticsInfo_ST *p = client->fe_status = FE_HAS_SIGNAL |
(SmsMsgStatisticsInfo_ST *)(phdr + 1); FE_HAS_CARRIER |
FE_HAS_VITERBI |
if (p->Stat.IsDemodLocked) FE_HAS_SYNC |
{ FE_HAS_LOCK;
client->fe_status = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_LOCK;
client->fe_snr = p->Stat.SNR; client->fe_snr = p->Stat.SNR;
client->fe_ber = p->Stat.BER; client->fe_ber = p->Stat.BER;
if (p->Stat.InBandPwr < -95)
client->fe_signal_strength = 0;
else if (p->Stat.InBandPwr > -29)
client->fe_signal_strength = 100;
else
client->fe_signal_strength = (p->Stat.InBandPwr + 95) * 3 / 2;
}
else
{
client->fe_status = 0;
client->fe_snr =
client->fe_ber =
client->fe_signal_strength = 0;
}
complete(&client->stat_done); if (p->Stat.InBandPwr < -95)
break; client->fe_signal_strength = 0;
else if (p->Stat.InBandPwr > -29)
client->fe_signal_strength = 100;
else
client->fe_signal_strength =
(p->Stat.InBandPwr + 95) * 3 / 2;
} else {
client->fe_status = 0;
client->fe_snr =
client->fe_ber =
client->fe_signal_strength = 0;
} }
}
complete(&client->stat_done);
break;
} }
smscore_putbuffer(client->coredev, cb); smscore_putbuffer(client->coredev, cb);
...@@ -106,7 +108,8 @@ void smsdvb_onremove(void *context) ...@@ -106,7 +108,8 @@ void smsdvb_onremove(void *context)
static int smsdvb_start_feed(struct dvb_demux_feed *feed) static int smsdvb_start_feed(struct dvb_demux_feed *feed)
{ {
smsdvb_client_t *client = container_of(feed->demux, smsdvb_client_t, demux); smsdvb_client_t *client =
container_of(feed->demux, smsdvb_client_t, demux);
SmsMsgData_ST PidMsg; SmsMsgData_ST PidMsg;
printk("%s add pid %d(%x)\n", __func__, feed->pid, feed->pid); printk("%s add pid %d(%x)\n", __func__, feed->pid, feed->pid);
...@@ -118,12 +121,14 @@ static int smsdvb_start_feed(struct dvb_demux_feed *feed) ...@@ -118,12 +121,14 @@ static int smsdvb_start_feed(struct dvb_demux_feed *feed)
PidMsg.xMsgHeader.msgLength = sizeof(PidMsg); PidMsg.xMsgHeader.msgLength = sizeof(PidMsg);
PidMsg.msgData[0] = feed->pid; PidMsg.msgData[0] = feed->pid;
return smsclient_sendrequest(client->smsclient, &PidMsg, sizeof(PidMsg)); return smsclient_sendrequest(client->smsclient,
&PidMsg, sizeof(PidMsg));
} }
static int smsdvb_stop_feed(struct dvb_demux_feed *feed) static int smsdvb_stop_feed(struct dvb_demux_feed *feed)
{ {
smsdvb_client_t *client = container_of(feed->demux, smsdvb_client_t, demux); smsdvb_client_t *client =
container_of(feed->demux, smsdvb_client_t, demux);
SmsMsgData_ST PidMsg; SmsMsgData_ST PidMsg;
printk("%s remove pid %d(%x)\n", __func__, feed->pid, feed->pid); printk("%s remove pid %d(%x)\n", __func__, feed->pid, feed->pid);
...@@ -135,7 +140,8 @@ static int smsdvb_stop_feed(struct dvb_demux_feed *feed) ...@@ -135,7 +140,8 @@ static int smsdvb_stop_feed(struct dvb_demux_feed *feed)
PidMsg.xMsgHeader.msgLength = sizeof(PidMsg); PidMsg.xMsgHeader.msgLength = sizeof(PidMsg);
PidMsg.msgData[0] = feed->pid; PidMsg.msgData[0] = feed->pid;
return smsclient_sendrequest(client->smsclient, &PidMsg, sizeof(PidMsg)); return smsclient_sendrequest(client->smsclient,
&PidMsg, sizeof(PidMsg));
} }
static int smsdvb_sendrequest_and_wait(smsdvb_client_t *client, static int smsdvb_sendrequest_and_wait(smsdvb_client_t *client,
...@@ -146,13 +152,18 @@ static int smsdvb_sendrequest_and_wait(smsdvb_client_t *client, ...@@ -146,13 +152,18 @@ static int smsdvb_sendrequest_and_wait(smsdvb_client_t *client,
if (rc < 0) if (rc < 0)
return rc; return rc;
return wait_for_completion_timeout(completion, msecs_to_jiffies(2000)) ? 0 : -ETIME; return wait_for_completion_timeout(completion,
msecs_to_jiffies(2000)) ?
0 : -ETIME;
} }
static int smsdvb_send_statistics_request(smsdvb_client_t *client) static int smsdvb_send_statistics_request(smsdvb_client_t *client)
{ {
SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ, DVBT_BDA_CONTROL_MSG_ID, HIF_TASK, sizeof(SmsMsgHdr_ST), 0 }; SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ,
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg), &client->stat_done); DVBT_BDA_CONTROL_MSG_ID,
HIF_TASK, sizeof(SmsMsgHdr_ST), 0 };
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
&client->stat_done);
} }
static int smsdvb_read_status(struct dvb_frontend *fe, fe_status_t *stat) static int smsdvb_read_status(struct dvb_frontend *fe, fe_status_t *stat)
...@@ -199,7 +210,8 @@ static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr) ...@@ -199,7 +210,8 @@ static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr)
return rc; return rc;
} }
static int smsdvb_get_tune_settings(struct dvb_frontend *fe, struct dvb_frontend_tune_settings *tune) static int smsdvb_get_tune_settings(struct dvb_frontend *fe,
struct dvb_frontend_tune_settings *tune)
{ {
printk("%s\n", __func__); printk("%s\n", __func__);
...@@ -209,14 +221,15 @@ static int smsdvb_get_tune_settings(struct dvb_frontend *fe, struct dvb_frontend ...@@ -209,14 +221,15 @@ static int smsdvb_get_tune_settings(struct dvb_frontend *fe, struct dvb_frontend
return 0; return 0;
} }
static int smsdvb_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep) static int smsdvb_set_frontend(struct dvb_frontend *fe,
struct dvb_frontend_parameters *fep)
{ {
smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend); smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
struct struct
{ {
SmsMsgHdr_ST Msg; SmsMsgHdr_ST Msg;
u32 Data[3]; u32 Data[3];
} Msg; } Msg;
Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID; Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
...@@ -227,29 +240,32 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_para ...@@ -227,29 +240,32 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_para
Msg.Data[0] = fep->frequency; Msg.Data[0] = fep->frequency;
Msg.Data[2] = 12000000; Msg.Data[2] = 12000000;
printk("%s freq %d band %d\n", __func__, fep->frequency, fep->u.ofdm.bandwidth); printk("%s freq %d band %d\n", __func__,
fep->frequency, fep->u.ofdm.bandwidth);
switch(fep->u.ofdm.bandwidth) switch(fep->u.ofdm.bandwidth)
{ {
case BANDWIDTH_8_MHZ: Msg.Data[1] = BW_8_MHZ; break; case BANDWIDTH_8_MHZ: Msg.Data[1] = BW_8_MHZ; break;
case BANDWIDTH_7_MHZ: Msg.Data[1] = BW_7_MHZ; break; case BANDWIDTH_7_MHZ: Msg.Data[1] = BW_7_MHZ; break;
case BANDWIDTH_6_MHZ: Msg.Data[1] = BW_6_MHZ; break; case BANDWIDTH_6_MHZ: Msg.Data[1] = BW_6_MHZ; break;
// case BANDWIDTH_5_MHZ: Msg.Data[1] = BW_5_MHZ; break;
case BANDWIDTH_AUTO: return -EOPNOTSUPP; case BANDWIDTH_AUTO: return -EOPNOTSUPP;
default: return -EINVAL; default: return -EINVAL;
} }
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg), &client->tune_done); return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
&client->tune_done);
} }
static int smsdvb_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep) static int smsdvb_get_frontend(struct dvb_frontend *fe,
struct dvb_frontend_parameters *fep)
{ {
smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend); smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
printk("%s\n", __func__); printk("%s\n", __func__);
// todo: // todo:
memcpy(fep, &client->fe_params, sizeof(struct dvb_frontend_parameters)); memcpy(fep, &client->fe_params,
sizeof(struct dvb_frontend_parameters));
return 0; return 0;
} }
...@@ -260,19 +276,19 @@ static void smsdvb_release(struct dvb_frontend *fe) ...@@ -260,19 +276,19 @@ static void smsdvb_release(struct dvb_frontend *fe)
static struct dvb_frontend_ops smsdvb_fe_ops = { static struct dvb_frontend_ops smsdvb_fe_ops = {
.info = { .info = {
.name = "Siano Mobile Digital SMS10xx", .name = "Siano Mobile Digital SMS10xx",
.type = FE_OFDM, .type = FE_OFDM,
.frequency_min = 44250000, .frequency_min = 44250000,
.frequency_max = 867250000, .frequency_max = 867250000,
.frequency_stepsize = 250000, .frequency_stepsize = 250000,
.caps = FE_CAN_INVERSION_AUTO | .caps = FE_CAN_INVERSION_AUTO |
FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO | FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_QAM_AUTO | FE_CAN_TRANSMISSION_MODE_AUTO |
FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_GUARD_INTERVAL_AUTO |
FE_CAN_RECOVER | FE_CAN_RECOVER |
FE_CAN_HIERARCHY_AUTO, FE_CAN_HIERARCHY_AUTO,
}, },
.release = smsdvb_release, .release = smsdvb_release,
...@@ -287,8 +303,8 @@ static struct dvb_frontend_ops smsdvb_fe_ops = { ...@@ -287,8 +303,8 @@ static struct dvb_frontend_ops smsdvb_fe_ops = {
.read_snr = smsdvb_read_snr, .read_snr = smsdvb_read_snr,
}; };
int smsdvb_hotplug(smscore_device_t *coredev, struct device *device, int smsdvb_hotplug(smscore_device_t *coredev,
int arrival) struct device *device, int arrival)
{ {
smsclient_params_t params; smsclient_params_t params;
smsdvb_client_t *client; smsdvb_client_t *client;
...@@ -298,23 +314,21 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device, ...@@ -298,23 +314,21 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
if (!arrival) if (!arrival)
return 0; return 0;
if (smscore_get_device_mode(coredev) != 4) if (smscore_get_device_mode(coredev) != 4) {
{
printk(KERN_ERR "%sSMS Device mode is not set for DVB operation.\n", __func__); printk(KERN_ERR "%sSMS Device mode is not set for DVB operation.\n", __func__);
return 0; return 0;
} }
client = kzalloc(sizeof(smsdvb_client_t), GFP_KERNEL); client = kzalloc(sizeof(smsdvb_client_t), GFP_KERNEL);
if (!client) if (!client) {
{
printk(KERN_INFO "%s kmalloc() failed\n", __func__); printk(KERN_INFO "%s kmalloc() failed\n", __func__);
return -ENOMEM; return -ENOMEM;
} }
// register dvb adapter // register dvb adapter
rc = dvb_register_adapter(&client->adapter, "Siano Digital Receiver", THIS_MODULE, device, adapter_nr); rc = dvb_register_adapter(&client->adapter, "Siano Digital Receiver",
if (rc < 0) THIS_MODULE, device, adapter_nr);
{ if (rc < 0) {
printk("%s dvb_register_adapter() failed %d\n", __func__, rc); printk("%s dvb_register_adapter() failed %d\n", __func__, rc);
goto adapter_error; goto adapter_error;
} }
...@@ -327,8 +341,7 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device, ...@@ -327,8 +341,7 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
client->demux.stop_feed = smsdvb_stop_feed; client->demux.stop_feed = smsdvb_stop_feed;
rc = dvb_dmx_init(&client->demux); rc = dvb_dmx_init(&client->demux);
if (rc < 0) if (rc < 0) {
{
printk("%s dvb_dmx_init failed %d\n\n", __func__, rc); printk("%s dvb_dmx_init failed %d\n\n", __func__, rc);
goto dvbdmx_error; goto dvbdmx_error;
} }
...@@ -339,18 +352,17 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device, ...@@ -339,18 +352,17 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
client->dmxdev.capabilities = 0; client->dmxdev.capabilities = 0;
rc = dvb_dmxdev_init(&client->dmxdev, &client->adapter); rc = dvb_dmxdev_init(&client->dmxdev, &client->adapter);
if (rc < 0) if (rc < 0) {
{
printk("%s dvb_dmxdev_init failed %d\n", __func__, rc); printk("%s dvb_dmxdev_init failed %d\n", __func__, rc);
goto dmxdev_error; goto dmxdev_error;
} }
// init and register frontend // init and register frontend
memcpy(&client->frontend.ops, &smsdvb_fe_ops, sizeof(struct dvb_frontend_ops)); memcpy(&client->frontend.ops, &smsdvb_fe_ops,
sizeof(struct dvb_frontend_ops));
rc = dvb_register_frontend(&client->adapter, &client->frontend); rc = dvb_register_frontend(&client->adapter, &client->frontend);
if (rc < 0) if (rc < 0) {
{
printk("%s frontend registration failed %d\n", __func__, rc); printk("%s frontend registration failed %d\n", __func__, rc);
goto frontend_error; goto frontend_error;
} }
...@@ -362,9 +374,9 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device, ...@@ -362,9 +374,9 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
params.context = client; params.context = client;
rc = smscore_register_client(coredev, &params, &client->smsclient); rc = smscore_register_client(coredev, &params, &client->smsclient);
if (rc < 0) if (rc < 0) {
{ printk(KERN_INFO "%s smscore_register_client() failed %d\n",
printk(KERN_INFO "%s smscore_register_client() failed %d\n", __func__, rc); __func__, rc);
goto client_error; goto client_error;
} }
...@@ -421,9 +433,8 @@ void smsdvb_unregister(void) ...@@ -421,9 +433,8 @@ void smsdvb_unregister(void)
kmutex_lock(&g_smsdvb_clientslock); kmutex_lock(&g_smsdvb_clientslock);
while (!list_empty(&g_smsdvb_clients)) while (!list_empty(&g_smsdvb_clients))
smsdvb_unregister_client((smsdvb_client_t *) g_smsdvb_clients.next); smsdvb_unregister_client(
(smsdvb_client_t *) g_smsdvb_clients.next);
kmutex_unlock(&g_smsdvb_clientslock); kmutex_unlock(&g_smsdvb_clientslock);
} }
...@@ -57,8 +57,8 @@ typedef struct _smsusb_device ...@@ -57,8 +57,8 @@ typedef struct _smsusb_device
smsusb_urb_t surbs[MAX_URBS]; smsusb_urb_t surbs[MAX_URBS];
int response_alignment; int response_alignment;
int buffer_size; int buffer_size;
} *psmsusb_device_t; } *psmsusb_device_t;
int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb); int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb);
...@@ -68,44 +68,50 @@ void smsusb_onresponse(struct urb *urb) ...@@ -68,44 +68,50 @@ void smsusb_onresponse(struct urb *urb)
smsusb_urb_t *surb = (smsusb_urb_t *) urb->context; smsusb_urb_t *surb = (smsusb_urb_t *) urb->context;
smsusb_device_t *dev = surb->dev; smsusb_device_t *dev = surb->dev;
if (urb->status < 0) if (urb->status < 0) {
{ printk(KERN_INFO "%s error, urb status %d, %d bytes\n",
printk(KERN_INFO "%s error, urb status %d, %d bytes\n", __func__, urb->status, urb->actual_length); __func__, urb->status, urb->actual_length);
return; return;
} }
if (urb->actual_length > 0) if (urb->actual_length > 0) {
{
SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *) surb->cb->p; SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *) surb->cb->p;
if (urb->actual_length >= phdr->msgLength) if (urb->actual_length >= phdr->msgLength) {
{
surb->cb->size = phdr->msgLength; surb->cb->size = phdr->msgLength;
if (dev->response_alignment && (phdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG)) if (dev->response_alignment &&
{ (phdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG)) {
surb->cb->offset = dev->response_alignment + ((phdr->msgFlags >> 8) & 3);
surb->cb->offset =
// sanity check dev->response_alignment +
if (((int) phdr->msgLength + surb->cb->offset) > urb->actual_length) ((phdr->msgFlags >> 8) & 3);
{
printk("%s: invalid response msglen %d offset %d size %d\n", __func__, phdr->msgLength, surb->cb->offset, urb->actual_length); /* sanity check */
if (((int) phdr->msgLength +
surb->cb->offset) > urb->actual_length) {
printk(KERN_INFO "%s: invalid "
"response msglen %d offset %d "
"size %d\n", __func__,
phdr->msgLength,
surb->cb->offset,
urb->actual_length);
goto exit_and_resubmit; goto exit_and_resubmit;
} }
// move buffer pointer and copy header to its new location /* move buffer pointer and
* copy header to its new location */
memcpy((char *) phdr + surb->cb->offset, memcpy((char *) phdr + surb->cb->offset,
phdr, sizeof(SmsMsgHdr_ST)); phdr, sizeof(SmsMsgHdr_ST));
} } else
else
surb->cb->offset = 0; surb->cb->offset = 0;
smscore_onresponse(dev->coredev, surb->cb); smscore_onresponse(dev->coredev, surb->cb);
surb->cb = NULL; surb->cb = NULL;
} } else {
else printk(KERN_INFO "%s invalid response "
{ "msglen %d actual %d\n", __func__,
printk("%s invalid response msglen %d actual %d\n", __func__, phdr->msgLength, urb->actual_length); phdr->msgLength, urb->actual_length);
} }
} }
...@@ -115,12 +121,11 @@ void smsusb_onresponse(struct urb *urb) ...@@ -115,12 +121,11 @@ void smsusb_onresponse(struct urb *urb)
int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb) int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb)
{ {
if (!surb->cb) if (!surb->cb) {
{
surb->cb = smscore_getbuffer(dev->coredev); surb->cb = smscore_getbuffer(dev->coredev);
if (!surb->cb) if (!surb->cb) {
{ printk(KERN_INFO "%s smscore_getbuffer(...) "
printk(KERN_INFO "%s smscore_getbuffer(...) returned NULL\n", __func__); "returned NULL\n", __func__);
return -ENOMEM; return -ENOMEM;
} }
} }
...@@ -144,12 +149,10 @@ void smsusb_stop_streaming(smsusb_device_t *dev) ...@@ -144,12 +149,10 @@ void smsusb_stop_streaming(smsusb_device_t *dev)
{ {
int i; int i;
for (i = 0; i < MAX_URBS; i ++) for (i = 0; i < MAX_URBS; i ++) {
{
usb_kill_urb(&dev->surbs[i].urb); usb_kill_urb(&dev->surbs[i].urb);
if (dev->surbs[i].cb) if (dev->surbs[i].cb) {
{
smscore_putbuffer(dev->coredev, dev->surbs[i].cb); smscore_putbuffer(dev->coredev, dev->surbs[i].cb);
dev->surbs[i].cb = NULL; dev->surbs[i].cb = NULL;
} }
...@@ -160,12 +163,11 @@ int smsusb_start_streaming(smsusb_device_t *dev) ...@@ -160,12 +163,11 @@ int smsusb_start_streaming(smsusb_device_t *dev)
{ {
int i, rc; int i, rc;
for (i = 0; i < MAX_URBS; i ++) for (i = 0; i < MAX_URBS; i ++) {
{
rc = smsusb_submit_urb(dev, &dev->surbs[i]); rc = smsusb_submit_urb(dev, &dev->surbs[i]);
if (rc < 0) if (rc < 0) {
{ printk(KERN_INFO "%s smsusb_submit_urb(...) "
printk(KERN_INFO "%s smsusb_submit_urb(...) failed\n", __func__); "failed\n", __func__);
smsusb_stop_streaming(dev); smsusb_stop_streaming(dev);
break; break;
} }
...@@ -179,11 +181,11 @@ int smsusb_sendrequest(void *context, void *buffer, size_t size) ...@@ -179,11 +181,11 @@ int smsusb_sendrequest(void *context, void *buffer, size_t size)
smsusb_device_t *dev = (smsusb_device_t *) context; smsusb_device_t *dev = (smsusb_device_t *) context;
int dummy; int dummy;
return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2), buffer, size, &dummy, 1000); return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2),
buffer, size, &dummy, 1000);
} }
char *smsusb1_fw_lkup[] = char *smsusb1_fw_lkup[] = {
{
"dvbt_stellar_usb.inp", "dvbt_stellar_usb.inp",
"dvbh_stellar_usb.inp", "dvbh_stellar_usb.inp",
"tdmb_stellar_usb.inp", "tdmb_stellar_usb.inp",
...@@ -197,32 +199,31 @@ int smsusb1_load_firmware(struct usb_device *udev, int id) ...@@ -197,32 +199,31 @@ int smsusb1_load_firmware(struct usb_device *udev, int id)
u8 *fw_buffer; u8 *fw_buffer;
int rc, dummy; int rc, dummy;
if (id < DEVICE_MODE_DVBT || id > DEVICE_MODE_DVBT_BDA) if (id < DEVICE_MODE_DVBT || id > DEVICE_MODE_DVBT_BDA) {
{ printk(KERN_INFO "%s invalid firmware id specified %d\n",
printk(KERN_INFO "%s invalid firmware id specified %d\n", __func__, id); __func__, id);
return -EINVAL; return -EINVAL;
} }
rc = request_firmware(&fw, smsusb1_fw_lkup[id], &udev->dev); rc = request_firmware(&fw, smsusb1_fw_lkup[id], &udev->dev);
if (rc < 0) if (rc < 0) {
{ printk(KERN_INFO "%s failed to open \"%s\" mode %d\n",
printk(KERN_INFO "%s failed to open \"%s\" mode %d\n", __func__, smsusb1_fw_lkup[id], id); __func__, smsusb1_fw_lkup[id], id);
return rc; return rc;
} }
fw_buffer = kmalloc(fw->size, GFP_KERNEL); fw_buffer = kmalloc(fw->size, GFP_KERNEL);
if (fw_buffer) if (fw_buffer) {
{
memcpy(fw_buffer, fw->data, fw->size); memcpy(fw_buffer, fw->data, fw->size);
rc = usb_bulk_msg(udev, usb_sndbulkpipe(udev, 2), fw_buffer, fw->size, &dummy, 1000); rc = usb_bulk_msg(udev, usb_sndbulkpipe(udev, 2),
fw_buffer, fw->size, &dummy, 1000);
printk(KERN_INFO "%s: sent %d(%d) bytes, rc %d\n", __func__, fw->size, dummy, rc); printk(KERN_INFO "%s: sent %d(%d) bytes, rc %d\n",
__func__, fw->size, dummy, rc);
kfree(fw_buffer); kfree(fw_buffer);
} } else {
else
{
printk(KERN_INFO "failed to allocate firmware buffer\n"); printk(KERN_INFO "failed to allocate firmware buffer\n");
rc = -ENOMEM; rc = -ENOMEM;
} }
...@@ -238,33 +239,29 @@ void smsusb1_detectmode(void *context, int *mode) ...@@ -238,33 +239,29 @@ void smsusb1_detectmode(void *context, int *mode)
*mode = DEVICE_MODE_NONE; *mode = DEVICE_MODE_NONE;
if (!product_string) if (!product_string) {
{
product_string = "none"; product_string = "none";
printk("%s product string not found\n", __func__); printk("%s product string not found\n", __func__);
} } else if (strstr(product_string, "DVBH"))
else *mode = 1;
{ else if (strstr(product_string, "BDA"))
if (strstr(product_string, "DVBH")) *mode = 4;
*mode = 1; else if (strstr(product_string, "DVBT"))
else if (strstr(product_string, "BDA")) *mode = 0;
*mode = 4; else if (strstr(product_string, "TDMB"))
else if (strstr(product_string, "DVBT")) *mode = 2;
*mode = 0;
else if (strstr(product_string, "TDMB"))
*mode = 2;
}
printk("%s: %d \"%s\"\n", __func__, *mode, product_string); printk("%s: %d \"%s\"\n", __func__, *mode, product_string);
} }
int smsusb1_setmode(void *context, int mode) int smsusb1_setmode(void *context, int mode)
{ {
SmsMsgHdr_ST Msg = { MSG_SW_RELOAD_REQ, 0, HIF_TASK, sizeof(SmsMsgHdr_ST), 0 }; SmsMsgHdr_ST Msg = { MSG_SW_RELOAD_REQ, 0, HIF_TASK,
sizeof(SmsMsgHdr_ST), 0 };
if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_DVBT_BDA) if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_DVBT_BDA) {
{ printk(KERN_INFO "%s invalid firmware id specified %d\n",
printk(KERN_INFO "%s invalid firmware id specified %d\n", __func__, mode); __func__, mode);
return -EINVAL; return -EINVAL;
} }
...@@ -275,8 +272,7 @@ void smsusb_term_device(struct usb_interface *intf) ...@@ -275,8 +272,7 @@ void smsusb_term_device(struct usb_interface *intf)
{ {
smsusb_device_t *dev = (smsusb_device_t *) usb_get_intfdata(intf); smsusb_device_t *dev = (smsusb_device_t *) usb_get_intfdata(intf);
if (dev) if (dev) {
{
smsusb_stop_streaming(dev); smsusb_stop_streaming(dev);
// unregister from smscore // unregister from smscore
...@@ -299,9 +295,9 @@ int smsusb_init_device(struct usb_interface *intf) ...@@ -299,9 +295,9 @@ int smsusb_init_device(struct usb_interface *intf)
// create device object // create device object
dev = kzalloc(sizeof(smsusb_device_t), GFP_KERNEL); dev = kzalloc(sizeof(smsusb_device_t), GFP_KERNEL);
if (!dev) if (!dev) {
{ printk(KERN_INFO "%s kzalloc(sizeof(smsusb_device_t) failed\n",
printk(KERN_INFO "%s kzalloc(sizeof(smsusb_device_t) failed\n", __func__); __func__);
return -ENOMEM; return -ENOMEM;
} }
...@@ -336,7 +332,9 @@ int smsusb_init_device(struct usb_interface *intf) ...@@ -336,7 +332,9 @@ int smsusb_init_device(struct usb_interface *intf)
} }
dev->buffer_size = USB2_BUFFER_SIZE; dev->buffer_size = USB2_BUFFER_SIZE;
dev->response_alignment = dev->udev->ep_in[1]->desc.wMaxPacketSize - sizeof(SmsMsgHdr_ST); dev->response_alignment =
dev->udev->ep_in[1]->desc.wMaxPacketSize -
sizeof(SmsMsgHdr_ST);
params.flags |= SMS_DEVICE_FAMILY2; params.flags |= SMS_DEVICE_FAMILY2;
break; break;
...@@ -347,37 +345,37 @@ int smsusb_init_device(struct usb_interface *intf) ...@@ -347,37 +345,37 @@ int smsusb_init_device(struct usb_interface *intf)
params.num_buffers = MAX_BUFFERS; params.num_buffers = MAX_BUFFERS;
params.sendrequest_handler = smsusb_sendrequest; params.sendrequest_handler = smsusb_sendrequest;
params.context = dev; params.context = dev;
snprintf(params.devpath, sizeof(params.devpath), "usb\\%d-%s", dev->udev->bus->busnum, dev->udev->devpath); snprintf(params.devpath, sizeof(params.devpath),
"usb\\%d-%s", dev->udev->bus->busnum, dev->udev->devpath);
// register in smscore /* register in smscore */
rc = smscore_register_device(&params, &dev->coredev); rc = smscore_register_device(&params, &dev->coredev);
if (rc < 0) if (rc < 0) {
{ printk(KERN_INFO "%s smscore_register_device(...) failed, "
printk(KERN_INFO "%s smscore_register_device(...) failed, rc %d\n", __func__, rc); "rc %d\n", __func__, rc);
smsusb_term_device(intf); smsusb_term_device(intf);
return rc; return rc;
} }
// initialize urbs // initialize urbs
for (i = 0; i < MAX_URBS; i ++) for (i = 0; i < MAX_URBS; i++) {
{
dev->surbs[i].dev = dev; dev->surbs[i].dev = dev;
usb_init_urb(&dev->surbs[i].urb); usb_init_urb(&dev->surbs[i].urb);
} }
printk(KERN_INFO "%s smsusb_start_streaming(...).\n", __func__); printk(KERN_INFO "%s smsusb_start_streaming(...).\n", __func__);
rc = smsusb_start_streaming(dev); rc = smsusb_start_streaming(dev);
if (rc < 0) if (rc < 0) {
{ printk(KERN_INFO "%s smsusb_start_streaming(...) failed\n",
printk(KERN_INFO "%s smsusb_start_streaming(...) failed\n", __func__); __func__);
smsusb_term_device(intf); smsusb_term_device(intf);
return rc; return rc;
} }
rc = smscore_start_device(dev->coredev); rc = smscore_start_device(dev->coredev);
if (rc < 0) if (rc < 0) {
{ printk(KERN_INFO "%s smscore_start_device(...) failed\n",
printk(KERN_INFO "%s smscore_start_device(...) failed\n", __func__); __func__);
smsusb_term_device(intf); smsusb_term_device(intf);
return rc; return rc;
} }
...@@ -396,29 +394,32 @@ int smsusb_probe(struct usb_interface *intf, const struct usb_device_id *id) ...@@ -396,29 +394,32 @@ int smsusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
rc = usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x81)); rc = usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x81));
rc = usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x02)); rc = usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x02));
if (intf->num_altsetting > 0) if (intf->num_altsetting > 0) {
{
rc = usb_set_interface(udev, intf->cur_altsetting->desc.bInterfaceNumber, 0); rc = usb_set_interface(udev, intf->cur_altsetting->desc.bInterfaceNumber, 0);
if (rc < 0) if (rc < 0) {
{ printk(KERN_INFO "%s usb_set_interface failed, "
printk(KERN_INFO "%s usb_set_interface failed, rc %d\n", __func__, rc); "rc %d\n", __func__, rc);
return rc; return rc;
} }
} }
printk(KERN_INFO "smsusb_probe %d\n", intf->cur_altsetting->desc.bInterfaceNumber); printk(KERN_INFO "smsusb_probe %d\n",
intf->cur_altsetting->desc.bInterfaceNumber);
for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i ++) for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i ++)
printk(KERN_INFO "endpoint %d %02x %02x %d\n", i, intf->cur_altsetting->endpoint[i].desc.bEndpointAddress, intf->cur_altsetting->endpoint[i].desc.bmAttributes, intf->cur_altsetting->endpoint[i].desc.wMaxPacketSize); printk(KERN_INFO "endpoint %d %02x %02x %d\n", i,
intf->cur_altsetting->endpoint[i].desc.bEndpointAddress,
intf->cur_altsetting->endpoint[i].desc.bmAttributes,
intf->cur_altsetting->endpoint[i].desc.wMaxPacketSize);
if (udev->actconfig->desc.bNumInterfaces == 2 && intf->cur_altsetting->desc.bInterfaceNumber == 0) if ((udev->actconfig->desc.bNumInterfaces == 2) &&
{ (intf->cur_altsetting->desc.bInterfaceNumber == 0)) {
printk(KERN_INFO "rom interface 0 is not used\n"); printk(KERN_INFO "rom interface 0 is not used\n");
return -ENODEV; return -ENODEV;
} }
if (intf->cur_altsetting->desc.bInterfaceNumber == 1) if (intf->cur_altsetting->desc.bInterfaceNumber == 1) {
{ snprintf(devpath, sizeof(devpath), "usb\\%d-%s",
snprintf(devpath, sizeof(devpath), "usb\\%d-%s", udev->bus->busnum, udev->devpath); udev->bus->busnum, udev->devpath);
printk(KERN_INFO "stellar device was found.\n"); printk(KERN_INFO "stellar device was found.\n");
return smsusb1_load_firmware(udev, smscore_registry_getmode(devpath)); return smsusb1_load_firmware(udev, smscore_registry_getmode(devpath));
} }
...@@ -444,7 +445,7 @@ MODULE_DEVICE_TABLE (usb, smsusb_id_table); ...@@ -444,7 +445,7 @@ MODULE_DEVICE_TABLE (usb, smsusb_id_table);
static struct usb_driver smsusb_driver = { static struct usb_driver smsusb_driver = {
.name = "smsusb", .name = "smsusb",
.probe = smsusb_probe, .probe = smsusb_probe,
.disconnect = smsusb_disconnect, .disconnect = smsusb_disconnect,
.id_table = smsusb_id_table, .id_table = smsusb_id_table,
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册