]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/dvb/siano/smsdvb.c
[WATCHDOG] Merge code clean-up's from Alan Cox.
[linux-2.6-omap-h63xx.git] / drivers / media / dvb / siano / smsdvb.c
index 1a75033c35dee74a5081a9cc139889a571e64337..229274a14110515a8c00f020162c0310d1ab4d53 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Driver for the Siano SMS10xx USB dongle
+ *  Driver for the Siano SMS1xxx USB dongle
  *
  *  author: Anatoly Greenblat
  *
 #include <linux/init.h>
 
 #include "smscoreapi.h"
+#include "sms-cards.h"
 
 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
 
-struct list_head g_smsdvb_clients;
-kmutex_t g_smsdvb_clientslock;
+static struct list_head g_smsdvb_clients;
+static struct mutex g_smsdvb_clientslock;
 
-int smsdvb_onresponse(void *context, smscore_buffer_t *cb)
+static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
 {
-       smsdvb_client_t *client = (smsdvb_client_t *) context;
-       SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *)(((u8*) cb->p) + cb->offset);
+       struct smsdvb_client_t *client = (struct smsdvb_client_t *) context;
+       struct SmsMsgHdr_ST *phdr =
+               (struct SmsMsgHdr_ST *)(((u8 *) cb->p) + cb->offset);
 
-       switch(phdr->msgType)
+       switch (phdr->msgType) {
+       case MSG_SMS_DVBT_BDA_DATA:
+               dvb_dmx_swfilter(&client->demux, (u8 *)(phdr + 1),
+                                cb->size - sizeof(struct SmsMsgHdr_ST));
+               break;
+
+       case MSG_SMS_RF_TUNE_RES:
+               complete(&client->tune_done);
+               break;
+
+       case MSG_SMS_GET_STATISTICS_RES:
        {
-               case MSG_SMS_DVBT_BDA_DATA:
-                       dvb_dmx_swfilter(&client->demux, (u8*)(phdr + 1), cb->size - sizeof(SmsMsgHdr_ST));
-                       break;
-
-               case MSG_SMS_RF_TUNE_RES:
-                       complete(&client->tune_done);
-                       break;
-
-               case MSG_SMS_GET_STATISTICS_RES:
-               {
-                       SmsMsgStatisticsInfo_ST* p = (SmsMsgStatisticsInfo_ST*)(phdr + 1);
-
-                       if (p->Stat.IsDemodLocked)
-                       {
-                               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_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;
-                       }
+               struct SmsMsgStatisticsInfo_ST *p =
+                       (struct SmsMsgStatisticsInfo_ST *)(phdr + 1);
 
-                       complete(&client->stat_done);
-                       break;
+               if (p->Stat.IsDemodLocked) {
+                       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_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);
+               break;
+       } }
 
        smscore_putbuffer(client->coredev, cb);
 
        return 0;
 }
 
-void smsdvb_unregister_client(smsdvb_client_t* client)
+static void smsdvb_unregister_client(struct smsdvb_client_t *client)
 {
-       // must be called under clientslock
+       /* must be called under clientslock */
 
        list_del(&client->entry);
 
@@ -93,21 +98,23 @@ void smsdvb_unregister_client(smsdvb_client_t* client)
        kfree(client);
 }
 
-void smsdvb_onremove(void *context)
+static void smsdvb_onremove(void *context)
 {
        kmutex_lock(&g_smsdvb_clientslock);
 
-       smsdvb_unregister_client((smsdvb_client_t*) context);
+       smsdvb_unregister_client((struct smsdvb_client_t *) context);
 
        kmutex_unlock(&g_smsdvb_clientslock);
 }
 
 static int smsdvb_start_feed(struct dvb_demux_feed *feed)
 {
-       smsdvb_client_t *client = container_of(feed->demux, smsdvb_client_t, demux);
-       SmsMsgData_ST PidMsg;
+       struct smsdvb_client_t *client =
+               container_of(feed->demux, struct smsdvb_client_t, demux);
+       struct SmsMsgData_ST PidMsg;
 
-       printk("%s add pid %d(%x)\n", __func__, feed->pid, feed->pid);
+       sms_debug("add pid %d(%x)",
+                 feed->pid, feed->pid);
 
        PidMsg.xMsgHeader.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
        PidMsg.xMsgHeader.msgDstId = HIF_TASK;
@@ -116,15 +123,18 @@ static int smsdvb_start_feed(struct dvb_demux_feed *feed)
        PidMsg.xMsgHeader.msgLength = sizeof(PidMsg);
        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)
 {
-       smsdvb_client_t *client = container_of(feed->demux, smsdvb_client_t, demux);
-       SmsMsgData_ST PidMsg;
+       struct smsdvb_client_t *client =
+               container_of(feed->demux, struct smsdvb_client_t, demux);
+       struct SmsMsgData_ST PidMsg;
 
-       printk("%s remove pid %d(%x)\n", __func__, feed->pid, feed->pid);
+       sms_debug("remove pid %d(%x)",
+                 feed->pid, feed->pid);
 
        PidMsg.xMsgHeader.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
        PidMsg.xMsgHeader.msgDstId = HIF_TASK;
@@ -133,27 +143,36 @@ static int smsdvb_stop_feed(struct dvb_demux_feed *feed)
        PidMsg.xMsgHeader.msgLength = sizeof(PidMsg);
        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, void* buffer, size_t size, struct completion *completion)
+static int smsdvb_sendrequest_and_wait(struct smsdvb_client_t *client,
+                                       void *buffer, size_t size,
+                                       struct completion *completion)
 {
        int rc = smsclient_sendrequest(client->smsclient, buffer, size);
        if (rc < 0)
                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(struct smsdvb_client_t *client)
 {
-       SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ, DVBT_BDA_CONTROL_MSG_ID, HIF_TASK, sizeof(SmsMsgHdr_ST), 0 };
-       return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg), &client->stat_done);
+       struct SmsMsgHdr_ST Msg = { MSG_SMS_GET_STATISTICS_REQ,
+                            DVBT_BDA_CONTROL_MSG_ID,
+                            HIF_TASK, sizeof(struct 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)
 {
-       smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
+       struct smsdvb_client_t *client =
+               container_of(fe, struct smsdvb_client_t, frontend);
        int rc = smsdvb_send_statistics_request(client);
 
        if (!rc)
@@ -164,7 +183,8 @@ static int smsdvb_read_status(struct dvb_frontend *fe, fe_status_t *stat)
 
 static int smsdvb_read_ber(struct dvb_frontend *fe, u32 *ber)
 {
-       smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
+       struct smsdvb_client_t *client =
+               container_of(fe, struct smsdvb_client_t, frontend);
        int rc = smsdvb_send_statistics_request(client);
 
        if (!rc)
@@ -175,7 +195,8 @@ static int smsdvb_read_ber(struct dvb_frontend *fe, u32 *ber)
 
 static int smsdvb_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 {
-       smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
+       struct smsdvb_client_t *client =
+               container_of(fe, struct smsdvb_client_t, frontend);
        int rc = smsdvb_send_statistics_request(client);
 
        if (!rc)
@@ -186,7 +207,8 @@ static int smsdvb_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
 
 static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr)
 {
-       smsdvb_client_t *client = container_of(fe, smsdvb_client_t, frontend);
+       struct smsdvb_client_t *client =
+               container_of(fe, struct smsdvb_client_t, frontend);
        int rc = smsdvb_send_statistics_request(client);
 
        if (!rc)
@@ -195,9 +217,10 @@ static int smsdvb_read_snr(struct dvb_frontend *fe, u16 *snr)
        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__);
+       sms_debug("");
 
        tune->min_delay_ms = 400;
        tune->step_size = 250000;
@@ -205,14 +228,15 @@ static int smsdvb_get_tune_settings(struct dvb_frontend *fe, struct dvb_frontend
        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);
+       struct smsdvb_client_t *client =
+               container_of(fe, struct smsdvb_client_t, frontend);
 
-       struct
-       {
-               SmsMsgHdr_ST    Msg;
-               u32                             Data[3];
+       struct {
+               struct SmsMsgHdr_ST     Msg;
+               u32             Data[3];
        } Msg;
 
        Msg.Msg.msgSrcId  = DVBT_BDA_CONTROL_MSG_ID;
@@ -223,52 +247,55 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_para
        Msg.Data[0] = fep->frequency;
        Msg.Data[2] = 12000000;
 
-       printk("%s freq %d band %d\n", __func__, fep->frequency, fep->u.ofdm.bandwidth);
+       sms_debug("freq %d band %d",
+                 fep->frequency, fep->u.ofdm.bandwidth);
 
-       switch(fep->u.ofdm.bandwidth)
-       {
-               case BANDWIDTH_8_MHZ: Msg.Data[1] = BW_8_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_5_MHZ: Msg.Data[1] = BW_5_MHZ; break;
-               case BANDWIDTH_AUTO: return -EOPNOTSUPP;
-               default: return -EINVAL;
+       switch (fep->u.ofdm.bandwidth) {
+       case BANDWIDTH_8_MHZ: Msg.Data[1] = BW_8_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_AUTO: return -EOPNOTSUPP;
+       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);
+       struct smsdvb_client_t *client =
+               container_of(fe, struct smsdvb_client_t, frontend);
 
-       printk("%s\n", __func__);
+       sms_debug("");
 
-       // todo:
-       memcpy(fep, &client->fe_params, sizeof(struct dvb_frontend_parameters));
+       /* todo: */
+       memcpy(fep, &client->fe_params,
+              sizeof(struct dvb_frontend_parameters));
        return 0;
 }
 
 static void smsdvb_release(struct dvb_frontend *fe)
 {
-       // do nothing
+       /* do nothing */
 }
 
 static struct dvb_frontend_ops smsdvb_fe_ops = {
        .info = {
-               .name                           = "Siano Mobile Digital SMS10xx",
-               .type                           = FE_OFDM,
+               .name                   = "Siano Mobile Digital SMS1xxx",
+               .type                   = FE_OFDM,
                .frequency_min          = 44250000,
                .frequency_max          = 867250000,
                .frequency_stepsize     = 250000,
                .caps = FE_CAN_INVERSION_AUTO |
-                               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_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | FE_CAN_QAM_AUTO |
-                               FE_CAN_TRANSMISSION_MODE_AUTO |
-                               FE_CAN_GUARD_INTERVAL_AUTO |
-                               FE_CAN_RECOVER |
-                               FE_CAN_HIERARCHY_AUTO,
+                       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_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
+                       FE_CAN_QAM_AUTO | FE_CAN_TRANSMISSION_MODE_AUTO |
+                       FE_CAN_GUARD_INTERVAL_AUTO |
+                       FE_CAN_RECOVER |
+                       FE_CAN_HIERARCHY_AUTO,
        },
 
        .release = smsdvb_release,
@@ -283,84 +310,82 @@ static struct dvb_frontend_ops smsdvb_fe_ops = {
        .read_snr = smsdvb_read_snr,
 };
 
-int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival)
+static int smsdvb_hotplug(struct smscore_device_t *coredev,
+                         struct device *device, int arrival)
 {
-       smsclient_params_t params;
-       smsdvb_client_t* client;
+       struct smsclient_params_t params;
+       struct smsdvb_client_t *client;
        int rc;
 
-       // device removal handled by onremove callback
+       /* device removal handled by onremove callback */
        if (!arrival)
                return 0;
 
-       if (smscore_get_device_mode(coredev) != 4)
-       {
-               rc = smscore_set_device_mode(coredev, 4);
-               if (rc < 0)
-                       return rc;
+       if (smscore_get_device_mode(coredev) != 4) {
+               sms_err("SMS Device mode is not set for "
+                       "DVB operation.");
+               return 0;
        }
 
-       client = kzalloc(sizeof(smsdvb_client_t), GFP_KERNEL);
-       if (!client)
-       {
-               printk(KERN_INFO "%s kmalloc() failed\n", __func__);
+       client = kzalloc(sizeof(struct smsdvb_client_t), GFP_KERNEL);
+       if (!client) {
+               sms_err("kmalloc() failed");
                return -ENOMEM;
        }
 
-       // register dvb adapter
-       rc = dvb_register_adapter(&client->adapter, "Siano Digital Receiver", THIS_MODULE, device, adapter_nr);
-       if (rc < 0)
-       {
-               printk("%s dvb_register_adapter() failed %d\n", __func__, rc);
+       /* register dvb adapter */
+       rc = dvb_register_adapter(&client->adapter,
+                                 sms_get_board(
+                                       smscore_get_board_id(coredev))->name,
+                                 THIS_MODULE, device, adapter_nr);
+       if (rc < 0) {
+               sms_err("dvb_register_adapter() failed %d", rc);
                goto adapter_error;
        }
 
-       // init dvb demux
+       /* init dvb demux */
        client->demux.dmx.capabilities = DMX_TS_FILTERING;
-       client->demux.filternum = 32; // todo: nova ???
+       client->demux.filternum = 32; /* todo: nova ??? */
        client->demux.feednum = 32;
        client->demux.start_feed = smsdvb_start_feed;
        client->demux.stop_feed = smsdvb_stop_feed;
 
        rc = dvb_dmx_init(&client->demux);
-       if (rc < 0)
-       {
-               printk("%s dvb_dmx_init failed %d\n\n", __func__, rc);
+       if (rc < 0) {
+               sms_err("dvb_dmx_init failed %d", rc);
                goto dvbdmx_error;
        }
 
-       // init dmxdev
+       /* init dmxdev */
        client->dmxdev.filternum = 32;
        client->dmxdev.demux = &client->demux.dmx;
        client->dmxdev.capabilities = 0;
 
        rc = dvb_dmxdev_init(&client->dmxdev, &client->adapter);
-       if (rc < 0)
-       {
-               printk("%s dvb_dmxdev_init failed %d\n", __func__, rc);
+       if (rc < 0) {
+               sms_err("dvb_dmxdev_init failed %d", rc);
                goto dmxdev_error;
        }
 
-       // init and register frontend
-       memcpy(&client->frontend.ops, &smsdvb_fe_ops, sizeof(struct dvb_frontend_ops));
+       /* init and register frontend */
+       memcpy(&client->frontend.ops, &smsdvb_fe_ops,
+              sizeof(struct dvb_frontend_ops));
 
        rc = dvb_register_frontend(&client->adapter, &client->frontend);
-       if (rc < 0)
-       {
-               printk("%s frontend registration failed %d\n", __func__, rc);
+       if (rc < 0) {
+               sms_err("frontend registration failed %d", rc);
                goto frontend_error;
        }
 
-       params.initial_id = 0;
+       params.initial_id = 1;
        params.data_type = MSG_SMS_DVBT_BDA_DATA;
        params.onresponse_handler = smsdvb_onresponse;
        params.onremove_handler = smsdvb_onremove;
        params.context = client;
 
        rc = smscore_register_client(coredev, &params, &client->smsclient);
-       if (rc < 0)
-       {
-               printk(KERN_INFO "%s smscore_register_client() failed %d\n", __func__, rc);
+       if (rc < 0) {
+               sms_err("smscore_register_client() failed %d", rc);
                goto client_error;
        }
 
@@ -375,7 +400,7 @@ int smsdvb_hotplug(smscore_device_t *coredev, struct device* device, int arrival
 
        kmutex_unlock(&g_smsdvb_clientslock);
 
-       printk(KERN_INFO "%s success\n", __func__);
+       sms_info("success");
 
        return 0;
 
@@ -405,7 +430,7 @@ int smsdvb_register(void)
 
        rc = smscore_register_hotplug(smsdvb_hotplug);
 
-       printk(KERN_INFO "%s\n", __func__);
+       sms_debug("");
 
        return rc;
 }
@@ -417,9 +442,8 @@ void smsdvb_unregister(void)
        kmutex_lock(&g_smsdvb_clientslock);
 
        while (!list_empty(&g_smsdvb_clients))
-               smsdvb_unregister_client((smsdvb_client_t*) g_smsdvb_clients.next);
+              smsdvb_unregister_client(
+                       (struct smsdvb_client_t *) g_smsdvb_clients.next);
 
        kmutex_unlock(&g_smsdvb_clientslock);
-
 }
-