#include "smscoreapi.h"
-#define PERROR(fmt, args...) printk( KERN_ERR "smscore error: line %d- %s(): " fmt,__LINE__, __func__, ## args)
+#define PERROR(fmt, args...)\
+ printk(KERN_ERR "smscore error: line %d- %s(): " fmt, \
+ __LINE__, __func__, ## args)
#ifdef SMSCORE_DEBUG
-
#undef PWARNING
-# define PWARNING(fmt, args...) printk( KERN_INFO "smscore warning: line %d- %s(): " fmt,__LINE__, __func__, ## args)
+# define PWARNING(fmt, args...) printk(KERN_INFO "smscore warning: " \
+ "line %d- %s(): " fmt, \
+ __LINE__, __func__, ## args)
#undef PDEBUG /* undef it, just in case */
-# define PDEBUG(fmt, args...) printk( KERN_INFO "smscore - %s(): " fmt, __func__, ## args)
-
+# define PDEBUG(fmt, args...) printk(KERN_INFO "smscore - %s(): " fmt, \
+ __func__, ## args)
#else /*SMSCORE_DEBUG*/
-
#define PDEBUG(fmt, args...)
#define PWARNING(fmt, args...)
-
#endif
-
typedef struct _smscore_device_notifyee
{
struct list_head entry;
module_param(default_mode, int, 0644);
MODULE_PARM_DESC(default_mode, "default firmware id (device mode)");
-static smscore_registry_entry_t *smscore_find_registry ( char *devpath )
+static smscore_registry_entry_t *smscore_find_registry(char *devpath)
{
smscore_registry_entry_t *entry;
struct list_head *next;
kmutex_lock(&g_smscore_registrylock);
- for (next = g_smscore_registry.next; next != &g_smscore_registry; next = next->next)
- {
+ for (next = g_smscore_registry.next;
+ next != &g_smscore_registry;
+ next = next->next) {
entry = (smscore_registry_entry_t *) next;
- if (!strcmp(entry->devpath, devpath))
- {
+ if (!strcmp(entry->devpath, devpath)) {
kmutex_unlock(&g_smscore_registrylock);
return entry;
}
}
- entry = (smscore_registry_entry_t *) kmalloc(sizeof(smscore_registry_entry_t), GFP_KERNEL);
- if (entry)
- {
+ entry = (smscore_registry_entry_t *)
+ kmalloc(sizeof(smscore_registry_entry_t), GFP_KERNEL);
+ if (entry) {
entry->mode = default_mode;
strcpy(entry->devpath, devpath);
list_add(&entry->entry, &g_smscore_registry);
- }
- else
- printk ( KERN_ERR "%s failed to create smscore_registry.\n", __func__ );
+ } else
+ printk(KERN_ERR "%s failed to create smscore_registry.\n",
+ __func__);
kmutex_unlock(&g_smscore_registrylock);
return entry;
}
-int smscore_registry_getmode ( char *devpath )
+int smscore_registry_getmode(char *devpath)
{
smscore_registry_entry_t *entry;
- entry = smscore_find_registry ( devpath );
- if ( entry )
- {
+ entry = smscore_find_registry(devpath);
+ if (entry)
return entry->mode;
- }
else
- {
- printk ( KERN_ERR "%s No registry found.\n", __func__ );
- }
+ printk(KERN_ERR "%s No registry found.\n", __func__);
+
return default_mode;
}
-sms_device_type_st smscore_registry_gettype ( char *devpath )
+sms_device_type_st smscore_registry_gettype(char *devpath)
{
smscore_registry_entry_t *entry;
- entry = smscore_find_registry ( devpath );
- if ( entry )
- {
+ entry = smscore_find_registry(devpath);
+ if (entry)
return entry->type;
- }
else
- {
- printk ( KERN_ERR "%s No registry found.\n", __func__ );
- }
+ printk(KERN_ERR "%s No registry found.\n", __func__);
+
return -1;
}
-void smscore_registry_setmode ( char *devpath, int mode )
- {
+void smscore_registry_setmode(char *devpath, int mode)
+{
smscore_registry_entry_t *entry;
- entry = smscore_find_registry ( devpath );
- if ( entry )
- {
- entry->mode = mode;
- }
+ entry = smscore_find_registry(devpath);
+ if (entry)
+ entry->mode = mode;
else
- {
- printk ( KERN_ERR "%s No registry found.\n", __func__ );
- }
- }
+ printk(KERN_ERR "%s No registry found.\n", __func__);
+}
-void smscore_registry_settype ( char *devpath, sms_device_type_st type )
+void smscore_registry_settype(char *devpath, sms_device_type_st type)
{
smscore_registry_entry_t *entry;
- entry = smscore_find_registry ( devpath );
- if ( entry )
- {
+ entry = smscore_find_registry(devpath);
+ if (entry)
entry->type = type;
- }
else
- {
- printk ( KERN_ERR "%s No registry found.\n", __func__ );
-}
+ printk(KERN_ERR "%s No registry found.\n", __func__);
}
void list_add_locked(struct list_head *new, struct list_head *head,
- spinlock_t *lock)
+ spinlock_t *lock)
{
unsigned long flags;
kmutex_lock(&g_smscore_deviceslock);
notifyee = kmalloc(sizeof(smscore_device_notifyee_t), GFP_KERNEL);
- if (notifyee)
- {
- // now notify callback about existing devices
+ if (notifyee) {
+ /* now notify callback about existing devices */
first = &g_smscore_devices;
- for (next = first->next; next != first && !rc; next = next->next)
- {
+ for (next = first->next;
+ next != first && !rc;
+ next = next->next) {
smscore_device_t *coredev = (smscore_device_t *) next;
rc = hotplug(coredev, coredev->device, 1);
}
- if (rc >= 0)
- {
+ if (rc >= 0) {
notifyee->hotplug = hotplug;
list_add(¬ifyee->entry, &g_smscore_notifyees);
- }
- else
+ } else
kfree(notifyee);
- }
- else
+ } else
rc = -ENOMEM;
kmutex_unlock(&g_smscore_deviceslock);
first = &g_smscore_notifyees;
- for (next = first->next; next != first;)
- {
- smscore_device_notifyee_t *notifyee = (smscore_device_notifyee_t *) next;
+ for (next = first->next; next != first;) {
+ smscore_device_notifyee_t *notifyee =
+ (smscore_device_notifyee_t *) next;
next = next->next;
- if (notifyee->hotplug == hotplug)
- {
+ if (notifyee->hotplug == hotplug) {
list_del(¬ifyee->entry);
kfree(notifyee);
}
{
smscore_client_t *client;
- // the client must call smscore_unregister_client from remove handler
- while (!list_empty(&coredev->clients))
- {
+ /* the client must call smscore_unregister_client from remove handler */
+ while (!list_empty(&coredev->clients)) {
client = (smscore_client_t *) coredev->clients.next;
client->onremove_handler(client->context);
}
}
-int smscore_notify_callbacks(smscore_device_t *coredev, struct device *device, int arrival)
+int smscore_notify_callbacks(smscore_device_t *coredev, struct device *device,
+ int arrival)
{
struct list_head *next, *first;
int rc = 0;
- // note: must be called under g_deviceslock
+ /* note: must be called under g_deviceslock */
first = &g_smscore_notifyees;
- for (next = first->next; next != first; next = next->next)
- {
+ for (next = first->next; next != first; next = next->next) {
rc = ((smscore_device_notifyee_t *) next)->hotplug(coredev, device, arrival);
if (rc < 0)
break;
dma_addr_t common_buffer_phys)
{
smscore_buffer_t *cb = kmalloc(sizeof(smscore_buffer_t), GFP_KERNEL);
- if (!cb)
- {
+ if (!cb) {
printk(KERN_INFO "%s kmalloc(...) failed\n", __func__);
return NULL;
}
}
/**
- * creates coredev object for a device, prepares buffers, creates buffer mappings, notifies
- * registered hotplugs about new device.
+ * creates coredev object for a device, prepares buffers,
+ * creates buffer mappings, notifies registered hotplugs about new device.
*
* @param params device pointer to struct with device specific parameters and handlers
* @param coredev pointer to a value that receives created coredev object
*
* @return 0 on success, <0 on error.
*/
-int smscore_register_device(smsdevice_params_t *params, smscore_device_t **coredev)
+int smscore_register_device(smsdevice_params_t *params,
+ smscore_device_t **coredev)
{
smscore_device_t *dev;
u8 *buffer;
dev = kzalloc(sizeof(smscore_device_t), GFP_KERNEL);
- if (!dev)
- {
+ if (!dev) {
printk(KERN_INFO "%s kzalloc(...) failed\n", __func__);
return -ENOMEM;
}
- // init list entry so it could be safe in smscore_unregister_device
+ /* init list entry so it could be safe in smscore_unregister_device */
INIT_LIST_HEAD(&dev->entry);
- // init queues
+ /* init queues */
INIT_LIST_HEAD(&dev->clients);
INIT_LIST_HEAD(&dev->buffers);
- // init locks
+ /* init locks */
spin_lock_init(&dev->clientslock);
spin_lock_init(&dev->bufferslock);
- // init completion events
+ /* init completion events */
init_completion(&dev->version_ex_done);
init_completion(&dev->data_download_done);
init_completion(&dev->trigger_done);
init_completion(&dev->reload_start_done);
init_completion(&dev->resume_done);
- // alloc common buffer
+ /* alloc common buffer */
dev->common_buffer_size = params->buffer_size * params->num_buffers;
- dev->common_buffer = dma_alloc_coherent(NULL, dev->common_buffer_size, &dev->common_buffer_phys, GFP_KERNEL | GFP_DMA);
- if (!dev->common_buffer)
- {
+ dev->common_buffer = dma_alloc_coherent(NULL, dev->common_buffer_size,
+ &dev->common_buffer_phys,
+ GFP_KERNEL | GFP_DMA);
+ if (!dev->common_buffer) {
smscore_unregister_device(dev);
return -ENOMEM;
}
- // prepare dma buffers
- for (buffer = dev->common_buffer; dev->num_buffers < params->num_buffers; dev->num_buffers ++, buffer += params->buffer_size)
- {
+ /* prepare dma buffers */
+ for (buffer = dev->common_buffer;
+ dev->num_buffers < params->num_buffers;
+ dev->num_buffers ++, buffer += params->buffer_size) {
smscore_buffer_t *cb = smscore_createbuffer(buffer, dev->common_buffer, dev->common_buffer_phys);
- if (!cb)
- {
+ if (!cb) {
smscore_unregister_device(dev);
return -ENOMEM;
}
smscore_putbuffer(dev, cb);
}
- printk(KERN_INFO "%s allocated %d buffers\n", __func__, dev->num_buffers);
+ printk(KERN_INFO "%s allocated %d buffers\n",
+ __func__, dev->num_buffers);
dev->mode = DEVICE_MODE_NONE;
dev->context = params->context;
dev->device_flags = params->flags;
strcpy(dev->devpath, params->devpath);
- smscore_registry_settype ( dev->devpath, params->device_type );
+ smscore_registry_settype(dev->devpath, params->device_type);
- // add device to devices list
+ /* add device to devices list */
kmutex_lock(&g_smscore_deviceslock);
list_add(&dev->entry, &g_smscore_devices);
kmutex_unlock(&g_smscore_deviceslock);
int smscore_start_device(smscore_device_t *coredev)
{
int rc = smscore_set_device_mode(coredev, smscore_registry_getmode(coredev->devpath));
- if (rc < 0)
- {
- printk ( KERN_INFO "%s set device mode faile , rc %d\n", __func__, rc );
+ if (rc < 0) {
+ printk(KERN_INFO "%s set device mode faile , rc %d\n", __func__, rc);
return rc;
}
rc = smscore_notify_callbacks(coredev, coredev->device, 1);
- printk(KERN_INFO "%s device %p started, rc %d\n", __func__, coredev, rc);
+ printk(KERN_INFO "%s device %p started, rc %d\n",
+ __func__, coredev, rc);
kmutex_unlock(&g_smscore_deviceslock);
}
int smscore_sendrequest_and_wait(smscore_device_t *coredev, void *buffer,
- size_t size, struct completion *completion)
+ size_t size, struct completion *completion)
{
int rc = coredev->sendrequest_handler(coredev->context, buffer, size);
- if (rc < 0)
- {
- printk(KERN_INFO "%s sendrequest returned error %d\n", __func__, rc);
+ if (rc < 0) {
+ printk(KERN_INFO "%s sendrequest returned error %d\n",
+ __func__, rc);
return rc;
}
- return wait_for_completion_timeout(completion, msecs_to_jiffies(10000)) ? 0 : -ETIME;
+ return wait_for_completion_timeout(completion,
+ msecs_to_jiffies(10000)) ?
+ 0 : -ETIME;
}
-int smscore_load_firmware_family2(smscore_device_t *coredev, void *buffer, size_t size)
+int smscore_load_firmware_family2(smscore_device_t *coredev, void *buffer,
+ size_t size)
{
- SmsFirmware_ST* firmware = (SmsFirmware_ST*) buffer;
+ SmsFirmware_ST *firmware = (SmsFirmware_ST *) buffer;
SmsMsgHdr_ST *msg;
UINT32 mem_address = firmware->StartAddress;
u8 *payload = firmware->Payload;
int rc = 0;
- printk(KERN_INFO "%s loading FW to addr 0x%x size %d\n", __func__, mem_address,firmware->Length);
- if (coredev->preload_handler)
- {
+ printk(KERN_INFO "%s loading FW to addr 0x%x size %d\n",
+ __func__, mem_address, firmware->Length);
+ if (coredev->preload_handler) {
rc = coredev->preload_handler(coredev->context);
if (rc < 0)
return rc;
}
- // PAGE_SIZE buffer shall be enough and dma aligned
+ /* PAGE_SIZE buffer shall be enough and dma aligned */
msg = (SmsMsgHdr_ST *) kmalloc(PAGE_SIZE, GFP_KERNEL | GFP_DMA);
if (!msg)
return -ENOMEM;
- if (coredev->mode != DEVICE_MODE_NONE)
- {
+ if (coredev->mode != DEVICE_MODE_NONE) {
PDEBUG("Sending reload command\n");
- SMS_INIT_MSG(msg, MSG_SW_RELOAD_START_REQ, sizeof(SmsMsgHdr_ST));
- rc = smscore_sendrequest_and_wait(coredev, msg, msg->msgLength, &coredev->reload_start_done);
+ SMS_INIT_MSG(msg, MSG_SW_RELOAD_START_REQ,
+ sizeof(SmsMsgHdr_ST));
+ rc = smscore_sendrequest_and_wait(coredev, msg,
+ msg->msgLength,
+ &coredev->reload_start_done);
mem_address = *(UINT32*) &payload[20];
}
SmsDataDownload_ST *DataMsg = (SmsDataDownload_ST *) msg;
int payload_size = min((int) size, SMS_MAX_PAYLOAD_SIZE);
- SMS_INIT_MSG(msg, MSG_SMS_DATA_DOWNLOAD_REQ, (UINT16)(sizeof(SmsMsgHdr_ST) + sizeof(UINT32) + payload_size));
+ SMS_INIT_MSG(msg, MSG_SMS_DATA_DOWNLOAD_REQ,
+ (UINT16)(sizeof(SmsMsgHdr_ST) +
+ sizeof(UINT32) + payload_size));
DataMsg->MemAddr = mem_address;
memcpy(DataMsg->Payload, payload, payload_size);
- if (coredev->device_flags & SMS_ROM_NO_RESPONSE && coredev->mode == DEVICE_MODE_NONE)
+ if ((coredev->device_flags & SMS_ROM_NO_RESPONSE) &&
+ (coredev->mode == DEVICE_MODE_NONE))
rc = coredev->sendrequest_handler(coredev->context, DataMsg, DataMsg->xMsgHeader.msgLength);
else
rc = smscore_sendrequest_and_wait(coredev, DataMsg, DataMsg->xMsgHeader.msgLength, &coredev->data_download_done);
mem_address += payload_size;
}
- if (rc >= 0)
- {
- if (coredev->mode == DEVICE_MODE_NONE)
- {
- SmsMsgData_ST* TriggerMsg = (SmsMsgData_ST*) msg;
+ if (rc >= 0) {
+ if (coredev->mode == DEVICE_MODE_NONE) {
+ SmsMsgData_ST *TriggerMsg = (SmsMsgData_ST *) msg;
- SMS_INIT_MSG(msg, MSG_SMS_SWDOWNLOAD_TRIGGER_REQ, sizeof(SmsMsgHdr_ST) + sizeof(UINT32) * 5);
+ SMS_INIT_MSG(msg, MSG_SMS_SWDOWNLOAD_TRIGGER_REQ,
+ sizeof(SmsMsgHdr_ST) +
+ sizeof(UINT32) * 5);
TriggerMsg->msgData[0] = firmware->StartAddress; // Entry point
TriggerMsg->msgData[1] = 5; // Priority
TriggerMsg->msgData[3] = 0; // Parameter
TriggerMsg->msgData[4] = 4; // Task ID
- if (coredev->device_flags & SMS_ROM_NO_RESPONSE)
- {
+ if (coredev->device_flags & SMS_ROM_NO_RESPONSE) {
rc = coredev->sendrequest_handler(coredev->context, TriggerMsg, TriggerMsg->xMsgHeader.msgLength);
msleep(100);
- }
- else
+ } else
rc = smscore_sendrequest_and_wait(coredev, TriggerMsg, TriggerMsg->xMsgHeader.msgLength, &coredev->trigger_done);
- }
- else
- {
- SMS_INIT_MSG(msg, MSG_SW_RELOAD_EXEC_REQ, sizeof(SmsMsgHdr_ST));
+ } else {
+ SMS_INIT_MSG(msg, MSG_SW_RELOAD_EXEC_REQ,
+ sizeof(SmsMsgHdr_ST));
- rc = coredev->sendrequest_handler(coredev->context, msg, msg->msgLength);
+ rc = coredev->sendrequest_handler(coredev->context,
+ msg, msg->msgLength);
}
- msleep ( 500 );
+ msleep(500);
}
- printk("%s rc=%d, postload=%p \n", __func__, rc, coredev->postload_handler);
+ printk("%s rc=%d, postload=%p \n", __func__, rc,
+ coredev->postload_handler);
kfree(msg);
*
* @return 0 on success, <0 on error.
*/
-int smscore_load_firmware_from_file(smscore_device_t *coredev, char *filename, loadfirmware_t loadfirmware_handler)
+int smscore_load_firmware_from_file(smscore_device_t *coredev, char *filename,
+ loadfirmware_t loadfirmware_handler)
{
int rc = -ENOENT;
const struct firmware *fw;
u8 *fw_buffer;
- if (loadfirmware_handler == NULL && !(coredev->device_flags & SMS_DEVICE_FAMILY2))
+ if (loadfirmware_handler == NULL && !(coredev->device_flags &
+ SMS_DEVICE_FAMILY2))
return -EINVAL;
rc = request_firmware(&fw, filename, coredev->device);
- if (rc < 0)
- {
- printk(KERN_INFO "%s failed to open \"%s\"\n", __func__, filename);
+ if (rc < 0) {
+ printk(KERN_INFO "%s failed to open \"%s\"\n",
+ __func__, filename);
return rc;
}
- printk(KERN_INFO "%s read FW %s, size=%d\"\n", __func__, filename, fw->size);
- fw_buffer = kmalloc(ALIGN(fw->size, SMS_ALLOC_ALIGNMENT), GFP_KERNEL | GFP_DMA);
- if (fw_buffer)
- {
+ printk(KERN_INFO "%s read FW %s, size=%d\"\n", __func__,
+ filename, fw->size);
+ fw_buffer = kmalloc(ALIGN(fw->size, SMS_ALLOC_ALIGNMENT),
+ GFP_KERNEL | GFP_DMA);
+ if (fw_buffer) {
memcpy(fw_buffer, fw->data, fw->size);
rc = (coredev->device_flags & SMS_DEVICE_FAMILY2) ?
- smscore_load_firmware_family2(coredev, fw_buffer, fw->size) :
+ smscore_load_firmware_family2(coredev, fw_buffer, fw->size) :
loadfirmware_handler(coredev->context, fw_buffer, fw->size);
kfree(fw_buffer);
- }
- else
- {
- printk(KERN_INFO "%s failed to allocate firmware buffer\n", __func__);
+ } else {
+ printk(KERN_INFO "%s failed to allocate firmware buffer\n",
+ __func__);
rc = -ENOMEM;
}
return rc;
}
-int smscore_load_firmware_from_buffer(smscore_device_t *coredev, u8 *buffer, int size, int new_mode)
+int smscore_load_firmware_from_buffer(smscore_device_t *coredev, u8 *buffer,
+ int size, int new_mode)
{
PERROR("Feature not implemented yet\n");
return -EFAULT;
smscore_notify_clients(coredev);
smscore_notify_callbacks(coredev, NULL, 0);
- // at this point all buffers should be back
- // onresponse must no longer be called
+ /* at this point all buffers should be back
+ * onresponse must no longer be called */
- while (1)
- {
- while ((cb = smscore_getbuffer(coredev)))
- {
+ while (1) {
+ while ((cb = smscore_getbuffer(coredev))) {
kfree(cb);
num_buffers ++;
}
if (num_buffers == coredev->num_buffers)
break;
- if (++retry > 10)
- {
- printk(KERN_INFO "%s exiting although not all buffers released.\n", __func__);
+ if (++retry > 10) {
+ printk(KERN_INFO "%s exiting although "
+ "not all buffers released.\n", __func__);
break;
}
- printk(KERN_INFO "%s waiting for %d buffer(s)\n", __func__, coredev->num_buffers - num_buffers);
+ printk(KERN_INFO "%s waiting for %d buffer(s)\n", __func__,
+ coredev->num_buffers - num_buffers);
msleep(100);
}
printk(KERN_INFO "%s freed %d buffers\n", __func__, num_buffers);
if (coredev->common_buffer)
- dma_free_coherent(NULL, coredev->common_buffer_size, coredev->common_buffer, coredev->common_buffer_phys);
+ dma_free_coherent(NULL, coredev->common_buffer_size,
+ coredev->common_buffer,
+ coredev->common_buffer_phys);
list_del(&coredev->entry);
kfree(coredev);
int smscore_detect_mode(smscore_device_t *coredev)
{
- void *buffer = kmalloc(sizeof(SmsMsgHdr_ST) + SMS_DMA_ALIGNMENT, GFP_KERNEL | GFP_DMA);
+ void *buffer = kmalloc(sizeof(SmsMsgHdr_ST) + SMS_DMA_ALIGNMENT,
+ GFP_KERNEL | GFP_DMA);
SmsMsgHdr_ST *msg = (SmsMsgHdr_ST *) SMS_ALIGN_ADDRESS(buffer);
int rc;
SMS_INIT_MSG(msg, MSG_SMS_GET_VERSION_EX_REQ, sizeof(SmsMsgHdr_ST));
- rc = smscore_sendrequest_and_wait(coredev, msg, msg->msgLength, &coredev->version_ex_done);
- if (rc == -ETIME)
- {
+ rc = smscore_sendrequest_and_wait(coredev, msg, msg->msgLength,
+ &coredev->version_ex_done);
+ if (rc == -ETIME) {
printk("%s: MSG_SMS_GET_VERSION_EX_REQ failed first try\n", __func__);
- if (wait_for_completion_timeout(&coredev->resume_done, msecs_to_jiffies(5000)))
- {
+ if (wait_for_completion_timeout(&coredev->resume_done,
+ msecs_to_jiffies(5000))) {
rc = smscore_sendrequest_and_wait(coredev, msg, msg->msgLength, &coredev->version_ex_done);
if (rc < 0)
- {
printk("%s: MSG_SMS_GET_VERSION_EX_REQ failed second try, rc %d\n", __func__, rc);
- }
- }
- else
+ } else
rc = -ETIME;
}
return rc;
}
-char *smscore_fw_lkup[][SMS_NUM_OF_DEVICE_TYPES] =
-{
+char *smscore_fw_lkup[][SMS_NUM_OF_DEVICE_TYPES] = {
/*Stellar NOVA A0 Nova B0 VEGA*/
- /*DVBT*/ {"none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none"},
- /*DVBH*/ {"none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none"},
- /*TDMB*/ {"none", "tdmb_nova_12mhz.inp", "none" "none"},
- /*DABIP*/ {"none", "none", "none", "none"},
- /*BDA*/ {"none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none"},
- /*ISDBT*/ {"none", "isdbt_nova_12mhz.inp", "dvb_nova_12mhz.inp", "none"},
- /*ISDBTBDA*/{"none", "isdbt_nova_12mhz.inp", "isdbt_nova_12mhz_b0.inp", "none"},
- /*CMMB*/ {"none", "none", "none", "cmmb_vega_12mhz.inp"}
+ /*DVBT*/ {"none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none"},
+ /*DVBH*/ {"none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none"},
+ /*TDMB*/ {"none", "tdmb_nova_12mhz.inp", "none", "none"},
+ /*DABIP*/ {"none", "none", "none", "none"},
+ /*BDA*/ {"none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none"},
+ /*ISDBT*/ {"none", "isdbt_nova_12mhz.inp", "dvb_nova_12mhz.inp", "none"},
+ /*ISDBTBDA*/{"none", "isdbt_nova_12mhz.inp", "isdbt_nova_12mhz_b0.inp", "none"},
+ /*CMMB*/ {"none", "none", "none", "cmmb_vega_12mhz.inp"}
};
int rc = 0;
sms_device_type_st type;
- PDEBUG("set device mode to %d\n", mode );
- if (coredev->device_flags & SMS_DEVICE_FAMILY2)
- {
- if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_RAW_TUNER)
- {
- printk(KERN_INFO "%s invalid mode specified %d\n", __func__, mode);
+ PDEBUG("set device mode to %d\n", mode);
+ if (coredev->device_flags & SMS_DEVICE_FAMILY2) {
+ if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_RAW_TUNER) {
+ printk(KERN_INFO "%s invalid mode specified %d\n",
+ __func__, mode);
return -EINVAL;
}
smscore_registry_setmode(coredev->devpath, mode);
- if (!(coredev->device_flags & SMS_DEVICE_NOT_READY))
- {
+ if (!(coredev->device_flags & SMS_DEVICE_NOT_READY)) {
rc = smscore_detect_mode(coredev);
- if (rc < 0)
- {
- printk(KERN_INFO "%s mode detect failed %d\n", __func__, rc);
+ if (rc < 0) {
+ printk(KERN_INFO "%s mode detect failed %d\n",
+ __func__, rc);
return rc;
- }
+ }
}
- if (coredev->mode == mode)
- {
- printk(KERN_INFO "%s device mode %d already set\n", __func__, mode);
+ if (coredev->mode == mode) {
+ printk(KERN_INFO "%s device mode %d already set\n",
+ __func__, mode);
return 0;
}
- if (!(coredev->modes_supported & (1 << mode)))
- {
- type = smscore_registry_gettype ( coredev->devpath );
- rc = smscore_load_firmware_from_file ( coredev, smscore_fw_lkup[mode][type], NULL );
- if (rc < 0)
- {
+ if (!(coredev->modes_supported & (1 << mode))) {
+ type = smscore_registry_gettype(coredev->devpath);
+ rc = smscore_load_firmware_from_file(coredev, smscore_fw_lkup[mode][type], NULL);
+ if (rc < 0) {
printk(KERN_INFO "%s load firmware failed %d\n", __func__, rc);
return rc;
- }
- }
- else
- {
+ }
+ } else
printk(KERN_INFO "%s mode %d supported by running firmware\n", __func__, mode);
- }
- buffer = kmalloc(sizeof(SmsMsgData_ST) + SMS_DMA_ALIGNMENT, GFP_KERNEL | GFP_DMA);
- if (buffer)
- {
+ buffer = kmalloc(sizeof(SmsMsgData_ST) + SMS_DMA_ALIGNMENT,
+ GFP_KERNEL | GFP_DMA);
+ if (buffer) {
SmsMsgData_ST *msg = (SmsMsgData_ST *) SMS_ALIGN_ADDRESS(buffer);
SMS_INIT_MSG(&msg->xMsgHeader, MSG_SMS_INIT_DEVICE_REQ, sizeof(SmsMsgData_ST));
rc = smscore_sendrequest_and_wait(coredev, msg, msg->xMsgHeader.msgLength, &coredev->init_device_done);
kfree(buffer);
- }
- else
- {
+ } else {
printk(KERN_INFO "%s Could not allocate buffer for init device message.\n", __func__);
rc = -ENOMEM;
- }
- }
- else
- {
- if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_DVBT_BDA)
- {
- printk(KERN_INFO "%s invalid mode specified %d\n", __func__, mode);
+ }
+ } else {
+ if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_DVBT_BDA) {
+ printk(KERN_INFO "%s invalid mode specified %d\n",
+ __func__, mode);
return -EINVAL;
}
smscore_registry_setmode(coredev->devpath, mode);
if (coredev->detectmode_handler)
- coredev->detectmode_handler(coredev->context, &coredev->mode);
+ coredev->detectmode_handler(coredev->context,
+ &coredev->mode);
if (coredev->mode != mode && coredev->setmode_handler)
rc = coredev->setmode_handler(coredev->context, mode);
}
- if (rc >= 0)
- {
+ if (rc >= 0) {
coredev->mode = mode;
coredev->device_flags &= ~SMS_DEVICE_NOT_READY;
}
*
* @param coredev pointer to a coredev object returned by smscore_register_device
* @param data_type client data type (SMS_DONT_CARE for all types)
- * @param id client id (SMS_DONT_CARE for all id )
+ * @param id client id (SMS_DONT_CARE for all id)
*
*/
smscore_client_t *smscore_find_client(smscore_device_t *coredev, int data_type, int id)
spin_lock_irqsave(&coredev->clientslock, flags);
first = &coredev->clients;
- for (next = first->next; (next != first) && !client; next = next->next)
- {
- firstid = &((smscore_client_t*)next )->idlist;
- for (nextid = firstid->next ; nextid != firstid ; nextid = nextid->next)
- {
+ for (next = first->next;
+ (next != first) && !client;
+ next = next->next) {
+ firstid = &((smscore_client_t*)next)->idlist;
+ for (nextid = firstid->next;
+ nextid != firstid;
+ nextid = nextid->next) {
if ((((smscore_idlist_t*)nextid)->id == id) &&
(((smscore_idlist_t*)nextid)->data_type == data_type ||
- (((smscore_idlist_t*)nextid)->data_type == 0)))
- {
- client = (smscore_client_t*) next;
- break;
+ (((smscore_idlist_t*)nextid)->data_type == 0))) {
+ client = (smscore_client_t*) next;
+ break;
+ }
}
}
- }
spin_unlock_irqrestore(&coredev->clientslock, flags);
return client;
}
void smscore_onresponse(smscore_device_t *coredev, smscore_buffer_t *cb)
{
SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *)((u8 *) cb->p + cb->offset);
- smscore_client_t *client = smscore_find_client(coredev, phdr->msgType, phdr->msgDstId);
+ smscore_client_t *client = smscore_find_client(coredev, phdr->msgType,
+ phdr->msgDstId);
int rc = -EBUSY;
static unsigned long last_sample_time = 0;
if (time_now - last_sample_time > 10000)
{
- printk("\n%s data rate %d bytes/secs\n", __func__, (int)((data_total * 1000) / (time_now - last_sample_time)));
+ printk("\n%s data rate %d bytes/secs\n", __func__,
+ (int)((data_total * 1000) /
+ (time_now - last_sample_time)));
last_sample_time = time_now;
data_total = 0;
}
data_total += cb->size;
- /* If no client registered for type & id, check for control client where type is not registered*/
-// if (!client)
-// client = smscore_find_client( coredev, 0, phdr->msgDstId);
+ /* If no client registered for type & id,
+ * check for control client where type is not registered */
if (client)
rc = client->onresponse_handler(client->context, cb);
- if (rc < 0)
- {
- switch (phdr->msgType)
+ if (rc < 0) {
+ switch (phdr->msgType) {
+ case MSG_SMS_GET_VERSION_EX_RES:
{
- case MSG_SMS_GET_VERSION_EX_RES:
- {
- SmsVersionRes_ST *ver = (SmsVersionRes_ST*) phdr;
- printk("%s: MSG_SMS_GET_VERSION_EX_RES id %d prots 0x%x ver %d.%d\n", __func__, ver->FirmwareId, ver->SupportedProtocols, ver->RomVersionMajor, ver->RomVersionMinor);
-
- coredev->mode = ver->FirmwareId == 255 ? DEVICE_MODE_NONE : ver->FirmwareId;
- coredev->modes_supported = ver->SupportedProtocols;
-
- complete(&coredev->version_ex_done);
- break;
- }
-
- case MSG_SMS_INIT_DEVICE_RES:
- printk("%s: MSG_SMS_INIT_DEVICE_RES\n", __func__);
- complete(&coredev->init_device_done);
- break;
-
- case MSG_SW_RELOAD_START_RES:
- printk("%s: MSG_SW_RELOAD_START_RES\n", __func__);
- complete(&coredev->reload_start_done);
- break;
-
- case MSG_SMS_DATA_DOWNLOAD_RES:
- complete(&coredev->data_download_done);
- break;
-
- case MSG_SW_RELOAD_EXEC_RES:
- printk("%s: MSG_SW_RELOAD_EXEC_RES\n", __func__);
- break;
+ SmsVersionRes_ST *ver = (SmsVersionRes_ST *) phdr;
+ printk("%s: MSG_SMS_GET_VERSION_EX_RES id %d "
+ "prots 0x%x ver %d.%d\n", __func__,
+ ver->FirmwareId, ver->SupportedProtocols,
+ ver->RomVersionMajor, ver->RomVersionMinor);
- case MSG_SMS_SWDOWNLOAD_TRIGGER_RES:
- printk("%s: MSG_SMS_SWDOWNLOAD_TRIGGER_RES\n", __func__);
- complete(&coredev->trigger_done);
- break;
-
- case MSG_SMS_SLEEP_RESUME_COMP_IND:
- complete(&coredev->resume_done);
- break;
+ coredev->mode = ver->FirmwareId == 255 ?
+ DEVICE_MODE_NONE : ver->FirmwareId;
+ coredev->modes_supported = ver->SupportedProtocols;
- default:
- //printk(KERN_INFO "%s no client (%p) or error (%d), type:%d dstid:%d\n", __func__, client, rc, phdr->msgType, phdr->msgDstId);
- break;
+ complete(&coredev->version_ex_done);
+ break;
+ }
+ case MSG_SMS_INIT_DEVICE_RES:
+ printk("%s: MSG_SMS_INIT_DEVICE_RES\n", __func__);
+ complete(&coredev->init_device_done);
+ break;
+ case MSG_SW_RELOAD_START_RES:
+ printk("%s: MSG_SW_RELOAD_START_RES\n", __func__);
+ complete(&coredev->reload_start_done);
+ break;
+ case MSG_SMS_DATA_DOWNLOAD_RES:
+ complete(&coredev->data_download_done);
+ break;
+ case MSG_SW_RELOAD_EXEC_RES:
+ printk("%s: MSG_SW_RELOAD_EXEC_RES\n", __func__);
+ break;
+ case MSG_SMS_SWDOWNLOAD_TRIGGER_RES:
+ printk("%s: MSG_SMS_SWDOWNLOAD_TRIGGER_RES\n",
+ __func__);
+ complete(&coredev->trigger_done);
+ break;
+ case MSG_SMS_SLEEP_RESUME_COMP_IND:
+ complete(&coredev->resume_done);
+ break;
+ default:
+ break;
}
-
smscore_putbuffer(coredev, cb);
}
}
spin_lock_irqsave(&coredev->bufferslock, flags);
- if (!list_empty(&coredev->buffers))
- {
+ if (!list_empty(&coredev->buffers)) {
cb = (smscore_buffer_t *) coredev->buffers.next;
list_del(&cb->entry);
}
list_add_locked(&cb->entry, &coredev->buffers, &coredev->bufferslock);
}
-int smscore_validate_client(smscore_device_t *coredev, smscore_client_t *client, int data_type, int id)
+int smscore_validate_client(smscore_device_t *coredev,
+ smscore_client_t *client, int data_type, int id)
{
smscore_idlist_t *listentry;
smscore_client_t *registered_client;
- if ( !client )
- {
+ if (!client) {
PERROR("bad parameter.\n");
return -EFAULT;
}
registered_client = smscore_find_client(coredev, data_type, id);
- if (registered_client == client)
- {
+ if (registered_client == client) {
return 0;
}
- if (registered_client)
- {
+ if (registered_client) {
PERROR("The msg ID already registered to another client.\n");
return -EEXIST;
}
- listentry = kzalloc ( sizeof ( smscore_idlist_t ), GFP_KERNEL );
- if ( !listentry )
- {
+ listentry = kzalloc(sizeof(smscore_idlist_t), GFP_KERNEL);
+ if (!listentry) {
PERROR("Can't allocate memory for client id.\n");
return -ENOMEM;
}
listentry->id = id;
listentry->data_type = data_type;
- list_add_locked ( &listentry->entry, &client->idlist, &coredev->clientslock );
+ list_add_locked(&listentry->entry, &client->idlist,
+ &coredev->clientslock);
return 0;
}
int smscore_register_client(smscore_device_t *coredev, smsclient_params_t *params, smscore_client_t **client)
{
smscore_client_t *newclient;
- // check that no other channel with same parameters exists
- if (smscore_find_client(coredev, params->data_type, params->initial_id))
- {
+ /* check that no other channel with same parameters exists */
+ if (smscore_find_client(coredev, params->data_type,
+ params->initial_id)) {
PERROR("Client already exist.\n");
return -EEXIST;
}
newclient = kzalloc(sizeof(smscore_client_t), GFP_KERNEL);
- if (!newclient)
- {
+ if (!newclient) {
PERROR("Failed to allocate memory for client.\n");
return -ENOMEM;
}
- INIT_LIST_HEAD ( &newclient->idlist);
+ INIT_LIST_HEAD(&newclient->idlist);
newclient->coredev = coredev;
newclient->onresponse_handler = params->onresponse_handler;
newclient->onremove_handler = params->onremove_handler;
newclient->context = params->context;
- list_add_locked(&newclient->entry, &coredev->clients, &coredev->clientslock);
- smscore_validate_client(coredev, newclient, params->data_type, params->initial_id);
+ list_add_locked(&newclient->entry, &coredev->clients,
+ &coredev->clientslock);
+ smscore_validate_client(coredev, newclient, params->data_type,
+ params->initial_id);
*client = newclient;
- PDEBUG ( "%p %d %d\n", params->context, params->data_type, params->initial_id );
+ PDEBUG("%p %d %d\n", params->context, params->data_type,
+ params->initial_id);
return 0;
}
spin_lock_irqsave(&coredev->clientslock, flags);
- while (!list_empty( &client->idlist))
- {
- smscore_idlist_t *identry = (smscore_idlist_t*)client->idlist.next;
- list_del ( &identry->entry );
- kfree ( identry );
+ while (!list_empty(&client->idlist)) {
+ smscore_idlist_t *identry =
+ (smscore_idlist_t*) client->idlist.next;
+ list_del(&identry->entry);
+ kfree(identry);
}
printk(KERN_INFO "%s %p\n", __func__, client->context);
SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *) buffer;
int rc;
- if ( client == NULL )
- {
- printk(KERN_ERR "%s Got NULL client\n", __func__ );
+ if (client == NULL) {
+ printk(KERN_ERR "%s Got NULL client\n", __func__);
return -EINVAL;
}
coredev = client->coredev;
- // check that no other channel with same id exists
- if ( coredev == NULL )
- {
- printk(KERN_ERR "%s Got NULL coredev\n", __func__ );
+ /* check that no other channel with same id exists */
+ if (coredev == NULL) {
+ printk(KERN_ERR "%s Got NULL coredev\n", __func__);
return -EINVAL;
}
- rc = smscore_validate_client(client->coredev, client, 0, phdr->msgSrcId);
+ rc = smscore_validate_client(client->coredev, client, 0,
+ phdr->msgSrcId);
if (rc < 0)
return rc;
int smscore_map_common_buffer(smscore_device_t *coredev,
struct vm_area_struct *vma)
{
- unsigned long end = vma->vm_end, start = vma->vm_start, size = PAGE_ALIGN(coredev->common_buffer_size);
+ unsigned long end = vma->vm_end,
+ start = vma->vm_start,
+ size = PAGE_ALIGN(coredev->common_buffer_size);
- if (!(vma->vm_flags & (VM_READ | VM_SHARED)) || (vma->vm_flags & VM_WRITE))
- {
+ if (!(vma->vm_flags & (VM_READ | VM_SHARED)) ||
+ (vma->vm_flags & VM_WRITE)) {
printk(KERN_INFO "%s invalid vm flags\n", __func__);
return -EINVAL;
}
- if ((end - start) != size)
- {
- printk(KERN_INFO "%s invalid size %d expected %d\n", __func__, (int)(end - start), (int) size);
+ if ((end - start) != size) {
+ printk(KERN_INFO "%s invalid size %d expected %d\n",
+ __func__, (int)(end - start), (int) size);
return -EINVAL;
}
- if (remap_pfn_range(vma, start, coredev->common_buffer_phys >> PAGE_SHIFT, size, pgprot_noncached(vma->vm_page_prot)))
+ if (remap_pfn_range(vma, start,
+ coredev->common_buffer_phys >> PAGE_SHIFT,
+ size, pgprot_noncached(vma->vm_page_prot)))
{
printk(KERN_INFO "%s remap_page_range failed\n", __func__);
return -EAGAIN;
{
kmutex_lock(&g_smscore_deviceslock);
- while (!list_empty(&g_smscore_notifyees))
- {
- smscore_device_notifyee_t *notifyee = (smscore_device_notifyee_t *) g_smscore_notifyees.next;
+ while (!list_empty(&g_smscore_notifyees)) {
+ smscore_device_notifyee_t *notifyee =
+ (smscore_device_notifyee_t *) g_smscore_notifyees.next;
list_del(¬ifyee->entry);
kfree(notifyee);
kmutex_unlock(&g_smscore_deviceslock);
kmutex_lock(&g_smscore_registrylock);
- while (!list_empty(&g_smscore_registry))
- {
- smscore_registry_entry_t *entry = (smscore_registry_entry_t *) g_smscore_registry.next;
+ while (!list_empty(&g_smscore_registry)) {
+ smscore_registry_entry_t *entry =
+ (smscore_registry_entry_t *) g_smscore_registry.next;
list_del(&entry->entry);
kfree(entry);
module_exit(smscore_module_exit);
MODULE_DESCRIPTION("smscore");
-MODULE_AUTHOR ( "Siano Mobile Silicon,,, (doronc@siano-ms.com)" );
+MODULE_AUTHOR("Siano Mobile Silicon,,, (doronc@siano-ms.com)");
MODULE_LICENSE("GPL");
-
typedef struct _smscore_buffer
{
- // public members, once passed to clients can be changed freely
+ /* public members, once passed to clients can be changed freely */
struct list_head entry;
int size;
int offset;
- // private members, read-only for clients
+ /* private members, read-only for clients */
void *p;
dma_addr_t phys;
unsigned long offset_in_common;
void *context;
} smsclient_params_t;
-// GPIO definitions for antenna frequency domain control (SMS8021)
+/* GPIO definitions for antenna frequency domain control (SMS8021) */
#define SMS_ANTENNA_GPIO_0 1
#define SMS_ANTENNA_GPIO_1 0
UINT16 msgType;
UINT8 msgSrcId;
UINT8 msgDstId;
- UINT16 msgLength; // Length is of the entire message, including header
+ UINT16 msgLength; /* Length of entire message, including header */
UINT16 msgFlags;
} SmsMsgHdr_ST;
{
SmsMsgHdr_ST xMsgHeader;
- UINT16 ChipModel; // e.g. 0x1102 for SMS-1102 "Nova"
- UINT8 Step; // 0 - Step A
- UINT8 MetalFix; // 0 - Metal 0
+ UINT16 ChipModel; /* e.g. 0x1102 for SMS-1102 "Nova" */
+ UINT8 Step; /* 0 - Step A */
+ UINT8 MetalFix; /* 0 - Metal 0 */
- UINT8 FirmwareId; // 0xFF � ROM, otherwise the value indicated by SMSHOSTLIB_DEVICE_MODES_E
- UINT8 SupportedProtocols; // Bitwise OR combination of supported protocols
+ UINT8 FirmwareId; /* 0xFF � ROM, otherwise the value indicated by SMSHOSTLIB_DEVICE_MODES_E */
+ UINT8 SupportedProtocols; /* Bitwise OR combination of supported protocols */
- UINT8 VersionMajor;
- UINT8 VersionMinor;
- UINT8 VersionPatch;
- UINT8 VersionFieldPatch;
+ UINT8 VersionMajor;
+ UINT8 VersionMinor;
+ UINT8 VersionPatch;
+ UINT8 VersionFieldPatch;
- UINT8 RomVersionMajor;
- UINT8 RomVersionMinor;
- UINT8 RomVersionPatch;
- UINT8 RomVersionFieldPatch;
+ UINT8 RomVersionMajor;
+ UINT8 RomVersionMinor;
+ UINT8 RomVersionPatch;
+ UINT8 RomVersionFieldPatch;
- UINT8 TextLabel[34];
+ UINT8 TextLabel[34];
} SmsVersionRes_ST;
typedef struct SmsFirmware_S
typedef struct SMSHOSTLIB_STATISTICS_S
{
- UINT32 Reserved; //!< Reserved
-
- /// Common parameters
- UINT32 IsRfLocked; //!< 0 - not locked, 1 - locked
- UINT32 IsDemodLocked; //!< 0 - not locked, 1 - locked
- UINT32 IsExternalLNAOn; //!< 0 - external LNA off, 1 - external LNA on
-
- /// Reception quality
- INT32 SNR; //!< dB
- UINT32 BER; //!< Post Viterbi BER [1E-5]
- UINT32 FIB_CRC; //!< CRC errors percentage, valid only for DAB
- UINT32 TS_PER; //!< Transport stream PER, 0xFFFFFFFF indicate N/A, valid only for DVB-T/H
- UINT32 MFER; //!< DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H
- INT32 RSSI; //!< dBm
- INT32 InBandPwr; //!< In band power in dBM
- INT32 CarrierOffset; //!< Carrier Offset in bin/1024
-
- /// Transmission parameters
- UINT32 Frequency; //!< Frequency in Hz
- UINT32 Bandwidth; //!< Bandwidth in MHz, valid only for DVB-T/H
- UINT32 TransmissionMode; //!< Transmission Mode, for DAB modes 1-4, for DVB-T/H FFT mode carriers in Kilos
- UINT32 ModemState; //!< from SMS_DvbModemState_ET , valid only for DVB-T/H
- UINT32 GuardInterval; //!< Guard Interval, 1 divided by value , valid only for DVB-T/H
- UINT32 CodeRate; //!< Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H
- UINT32 LPCodeRate; //!< Low Priority Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H
- UINT32 Hierarchy; //!< Hierarchy from SMS_Hierarchy_ET, valid only for DVB-T/H
- UINT32 Constellation; //!< Constellation from SMS_Constellation_ET, valid only for DVB-T/H
-
- /// Burst parameters, valid only for DVB-H
- UINT32 BurstSize; //!< Current burst size in bytes, valid only for DVB-H
- UINT32 BurstDuration; //!< Current burst duration in mSec, valid only for DVB-H
- UINT32 BurstCycleTime; //!< Current burst cycle time in mSec, valid only for DVB-H
- UINT32 CalculatedBurstCycleTime;//!< Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H
- UINT32 NumOfRows; //!< Number of rows in MPE table, valid only for DVB-H
- UINT32 NumOfPaddCols; //!< Number of padding columns in MPE table, valid only for DVB-H
- UINT32 NumOfPunctCols; //!< Number of puncturing columns in MPE table, valid only for DVB-H
- UINT32 ErrorTSPackets; //!< Number of erroneous transport-stream packets
- UINT32 TotalTSPackets; //!< Total number of transport-stream packets
- UINT32 NumOfValidMpeTlbs; //!< Number of MPE tables which do not include errors after MPE RS decoding
- UINT32 NumOfInvalidMpeTlbs; //!< Number of MPE tables which include errors after MPE RS decoding
- UINT32 NumOfCorrectedMpeTlbs; //!< Number of MPE tables which were corrected by MPE RS decoding
- /// Common params
- UINT32 BERErrorCount; //!< Number of errornous SYNC bits.
- UINT32 BERBitCount; //!< Total number of SYNC bits.
-
- /// Interface information
- UINT32 SmsToHostTxErrors; //!< Total number of transmission errors.
-
- /// DAB/T-DMB
- UINT32 PreBER; //!< DAB/T-DMB only: Pre Viterbi BER [1E-5]
-
- /// DVB-H TPS parameters
- UINT32 CellId; //!< TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered
+ UINT32 Reserved; /* Reserved */
+
+ /* Common parameters */
+ UINT32 IsRfLocked; /* 0 - not locked, 1 - locked */
+ UINT32 IsDemodLocked; /* 0 - not locked, 1 - locked */
+ UINT32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */
+
+ /* Reception quality */
+ INT32 SNR; /* dB */
+ UINT32 BER; /* Post Viterbi BER [1E-5] */
+ UINT32 FIB_CRC; /* CRC errors percentage, valid only for DAB */
+ UINT32 TS_PER; /* Transport stream PER, 0xFFFFFFFF indicate N/A, valid only for DVB-T/H */
+ UINT32 MFER; /* DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H */
+ INT32 RSSI; /* dBm */
+ INT32 InBandPwr; /* In band power in dBM */
+ INT32 CarrierOffset; /* Carrier Offset in bin/1024 */
+
+ /* Transmission parameters */
+ UINT32 Frequency; /* Frequency in Hz */
+ UINT32 Bandwidth; /* Bandwidth in MHz, valid only for DVB-T/H */
+ UINT32 TransmissionMode; /* Transmission Mode, for DAB modes 1-4, for DVB-T/H FFT mode carriers in Kilos */
+ UINT32 ModemState; /* from SMS_DvbModemState_ET , valid only for DVB-T/H */
+ UINT32 GuardInterval; /* Guard Interval, 1 divided by value , valid only for DVB-T/H */
+ UINT32 CodeRate; /* Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H */
+ UINT32 LPCodeRate; /* Low Priority Code Rate from SMS_DvbModemState_ET, valid only for DVB-T/H */
+ UINT32 Hierarchy; /* Hierarchy from SMS_Hierarchy_ET, valid only for DVB-T/H */
+ UINT32 Constellation; /* Constellation from SMS_Constellation_ET, valid only for DVB-T/H */
+
+ /* Burst parameters, valid only for DVB-H */
+ UINT32 BurstSize; /* Current burst size in bytes, valid only for DVB-H */
+ UINT32 BurstDuration; /* Current burst duration in mSec, valid only for DVB-H */
+ UINT32 BurstCycleTime; /* Current burst cycle time in mSec, valid only for DVB-H */
+ UINT32 CalculatedBurstCycleTime; /* Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H */
+ UINT32 NumOfRows; /* Number of rows in MPE table, valid only for DVB-H */
+ UINT32 NumOfPaddCols; /* Number of padding columns in MPE table, valid only for DVB-H */
+ UINT32 NumOfPunctCols; /* Number of puncturing columns in MPE table, valid only for DVB-H */
+ UINT32 ErrorTSPackets; /* Number of erroneous transport-stream packets */
+ UINT32 TotalTSPackets; /* Total number of transport-stream packets */
+ UINT32 NumOfValidMpeTlbs; /* Number of MPE tables which do not include errors after MPE RS decoding */
+ UINT32 NumOfInvalidMpeTlbs; /* Number of MPE tables which include errors after MPE RS decoding */
+ UINT32 NumOfCorrectedMpeTlbs; /* Number of MPE tables which were corrected by MPE RS decoding */
+
+ /* Common params */
+ UINT32 BERErrorCount; /* Number of errornous SYNC bits. */
+ UINT32 BERBitCount; /* Total number of SYNC bits. */
+
+ /* Interface information */
+ UINT32 SmsToHostTxErrors; /* Total number of transmission errors. */
+
+ /* DAB/T-DMB */
+ UINT32 PreBER; /* DAB/T-DMB only: Pre Viterbi BER [1E-5] */
+
+ /* DVB-H TPS parameters */
+ UINT32 CellId; /* TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered */
} SMSHOSTLIB_STATISTICS_ST;
SMSHOSTLIB_STATISTICS_ST Stat;
- // Split the calc of the SNR in DAB
- UINT32 Signal; //!< dB
- UINT32 Noise; //!< dB
+ /* Split the calc of the SNR in DAB */
+ UINT32 Signal; /* dB */
+ UINT32 Noise; /* dB */
} SmsMsgStatisticsInfo_ST;
typedef struct SMSHOSTLIB_ISDBT_LAYER_STAT_S
{
- // Per-layer information
- UINT32 CodeRate; //!< Code Rate from SMSHOSTLIB_CODE_RATE_ET, 255 means layer does not exist
- UINT32 Constellation; //!< Constellation from SMSHOSTLIB_CONSTELLATION_ET, 255 means layer does not exist
- UINT32 BER; //!< Post Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A
- UINT32 BERErrorCount; //!< Post Viterbi Error Bits Count
- UINT32 BERBitCount; //!< Post Viterbi Total Bits Count
- UINT32 PreBER; //!< Pre Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A
- UINT32 TS_PER; //!< Transport stream PER [%], 0xFFFFFFFF indicate N/A
- UINT32 ErrorTSPackets; //!< Number of erroneous transport-stream packets
- UINT32 TotalTSPackets; //!< Total number of transport-stream packets
- UINT32 TILdepthI; //!< Time interleaver depth I parameter, 255 means layer does not exist
- UINT32 NumberOfSegments; //!< Number of segments in layer A, 255 means layer does not exist
- UINT32 TMCCErrors; //!< TMCC errors
+ /* Per-layer information */
+ UINT32 CodeRate; /* Code Rate from SMSHOSTLIB_CODE_RATE_ET, 255 means layer does not exist */
+ UINT32 Constellation; /* Constellation from SMSHOSTLIB_CONSTELLATION_ET, 255 means layer does not exist */
+ UINT32 BER; /* Post Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A */
+ UINT32 BERErrorCount; /* Post Viterbi Error Bits Count */
+ UINT32 BERBitCount; /* Post Viterbi Total Bits Count */
+ UINT32 PreBER; /* Pre Viterbi BER [1E-5], 0xFFFFFFFF indicate N/A */
+ UINT32 TS_PER; /* Transport stream PER [%], 0xFFFFFFFF indicate N/A */
+ UINT32 ErrorTSPackets; /* Number of erroneous transport-stream packets */
+ UINT32 TotalTSPackets; /* Total number of transport-stream packets */
+ UINT32 TILdepthI; /* Time interleaver depth I parameter, 255 means layer does not exist */
+ UINT32 NumberOfSegments; /* Number of segments in layer A, 255 means layer does not exist */
+ UINT32 TMCCErrors; /* TMCC errors */
} SMSHOSTLIB_ISDBT_LAYER_STAT_ST;
typedef struct SMSHOSTLIB_STATISTICS_ISDBT_S
{
- UINT32 StatisticsType; //!< Enumerator identifying the type of the structure. Values are the same as SMSHOSTLIB_DEVICE_MODES_E
- //!< This fiels MUST always first in any statistics structure
-
- UINT32 FullSize; //!< Total size of the structure returned by the modem. If the size requested by
- //!< the host is smaller than FullSize, the struct will be truncated
-
- // Common parameters
- UINT32 IsRfLocked; //!< 0 - not locked, 1 - locked
- UINT32 IsDemodLocked; //!< 0 - not locked, 1 - locked
- UINT32 IsExternalLNAOn; //!< 0 - external LNA off, 1 - external LNA on
-
- // Reception quality
- INT32 SNR; //!< dB
- INT32 RSSI; //!< dBm
- INT32 InBandPwr; //!< In band power in dBM
- INT32 CarrierOffset; //!< Carrier Offset in Hz
-
- // Transmission parameters
- UINT32 Frequency; //!< Frequency in Hz
- UINT32 Bandwidth; //!< Bandwidth in MHz
- UINT32 TransmissionMode; //!< ISDB-T transmission mode
- UINT32 ModemState; //!< 0 - Acquisition, 1 - Locked
- UINT32 GuardInterval; //!< Guard Interval, 1 divided by value
- UINT32 SystemType; //!< ISDB-T system type (ISDB-T / ISDB-Tsb)
- UINT32 PartialReception; //!< TRUE - partial reception, FALSE otherwise
- UINT32 NumOfLayers; //!< Number of ISDB-T layers in the network
-
- // Per-layer information
- // Layers A, B and C
- SMSHOSTLIB_ISDBT_LAYER_STAT_ST LayerInfo[3]; //!< Per-layer statistics, see SMSHOSTLIB_ISDBT_LAYER_STAT_ST
-
- // Interface information
- UINT32 SmsToHostTxErrors; //!< Total number of transmission errors.
+ UINT32 StatisticsType; /* Enumerator identifying the type of the
+ * structure. Values are the same as
+ * SMSHOSTLIB_DEVICE_MODES_E
+ *
+ * This field MUST always be first in any
+ * statistics structure */
+
+ UINT32 FullSize; /* Total size of the structure returned by the modem. If the size requested by
+ * the host is smaller than FullSize, the struct will be truncated */
+
+ /* Common parameters */
+ UINT32 IsRfLocked; /* 0 - not locked, 1 - locked */
+ UINT32 IsDemodLocked; /* 0 - not locked, 1 - locked */
+ UINT32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */
+
+ /* Reception quality */
+ INT32 SNR; /* dB */
+ INT32 RSSI; /* dBm */
+ INT32 InBandPwr; /* In band power in dBM */
+ INT32 CarrierOffset; /* Carrier Offset in Hz */
+
+ /* Transmission parameters */
+ UINT32 Frequency; /* Frequency in Hz */
+ UINT32 Bandwidth; /* Bandwidth in MHz */
+ UINT32 TransmissionMode; /* ISDB-T transmission mode */
+ UINT32 ModemState; /* 0 - Acquisition, 1 - Locked */
+ UINT32 GuardInterval; /* Guard Interval, 1 divided by value */
+ UINT32 SystemType; /* ISDB-T system type (ISDB-T / ISDB-Tsb) */
+ UINT32 PartialReception; /* TRUE - partial reception, FALSE otherwise */
+ UINT32 NumOfLayers; /* Number of ISDB-T layers in the network */
+
+ /* Per-layer information */
+ /* Layers A, B and C */
+ SMSHOSTLIB_ISDBT_LAYER_STAT_ST LayerInfo[3]; /* Per-layer statistics, see SMSHOSTLIB_ISDBT_LAYER_STAT_ST */
+
+ /* Interface information */
+ UINT32 SmsToHostTxErrors; /* Total number of transmission errors. */
} SMSHOSTLIB_STATISTICS_ISDBT_ST;
typedef struct SMSHOSTLIB_STATISTICS_DVB_S
{
- UINT32 StatisticsType; //!< Enumerator identifying the type of the structure. Values are the same as SMSHOSTLIB_DEVICE_MODES_E
- //!< This fiels MUST always first in any statistics structure
-
- UINT32 FullSize; //!< Total size of the structure returned by the modem. If the size requested by
- //!< the host is smaller than FullSize, the struct will be truncated
- // Common parameters
- UINT32 IsRfLocked; //!< 0 - not locked, 1 - locked
- UINT32 IsDemodLocked; //!< 0 - not locked, 1 - locked
- UINT32 IsExternalLNAOn; //!< 0 - external LNA off, 1 - external LNA on
-
- // Reception quality
- INT32 SNR; //!< dB
- UINT32 BER; //!< Post Viterbi BER [1E-5]
- UINT32 BERErrorCount; //!< Number of errornous SYNC bits.
- UINT32 BERBitCount; //!< Total number of SYNC bits.
- UINT32 TS_PER; //!< Transport stream PER, 0xFFFFFFFF indicate N/A
- UINT32 MFER; //!< DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H
- INT32 RSSI; //!< dBm
- INT32 InBandPwr; //!< In band power in dBM
- INT32 CarrierOffset; //!< Carrier Offset in bin/1024
-
- // Transmission parameters
- UINT32 Frequency; //!< Frequency in Hz
- UINT32 Bandwidth; //!< Bandwidth in MHz
- UINT32 ModemState; //!< from SMSHOSTLIB_DVB_MODEM_STATE_ET
- UINT32 TransmissionMode; //!< FFT mode carriers in Kilos
- UINT32 GuardInterval; //!< Guard Interval, 1 divided by value
- UINT32 CodeRate; //!< Code Rate from SMSHOSTLIB_CODE_RATE_ET
- UINT32 LPCodeRate; //!< Low Priority Code Rate from SMSHOSTLIB_CODE_RATE_ET
- UINT32 Hierarchy; //!< Hierarchy from SMSHOSTLIB_HIERARCHY_ET
- UINT32 Constellation; //!< Constellation from SMSHOSTLIB_CONSTELLATION_ET
-
- // Burst parameters, valid only for DVB-H
- UINT32 BurstSize; //!< Current burst size in bytes, valid only for DVB-H
- UINT32 BurstDuration; //!< Current burst duration in mSec, valid only for DVB-H
- UINT32 BurstCycleTime; //!< Current burst cycle time in mSec, valid only for DVB-H
- UINT32 CalculatedBurstCycleTime;//!< Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H
- UINT32 NumOfRows; //!< Number of rows in MPE table, valid only for DVB-H
- UINT32 NumOfPaddCols; //!< Number of padding columns in MPE table, valid only for DVB-H
- UINT32 NumOfPunctCols; //!< Number of puncturing columns in MPE table, valid only for DVB-H
- UINT32 ErrorTSPackets; //!< Number of erroneous transport-stream packets
- UINT32 TotalTSPackets; //!< Total number of transport-stream packets
- UINT32 NumOfValidMpeTlbs; //!< Number of MPE tables which do not include errors after MPE RS decoding, valid only for DVB-H
- UINT32 NumOfInvalidMpeTlbs; //!< Number of MPE tables which include errors after MPE RS decoding, valid only for DVB-H
- UINT32 NumOfCorrectedMpeTlbs; //!< Number of MPE tables which were corrected by MPE RS decoding, valid only for DVB-H
- UINT32 NumMPEReceived; //!< DVB-H, Num MPE section received
-
- // DVB-H TPS parameters
- UINT32 CellId; //!< TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered
- UINT32 DvbhSrvIndHP; //!< DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator
- UINT32 DvbhSrvIndLP; //!< DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator
-
- // Interface information
- UINT32 SmsToHostTxErrors; //!< Total number of transmission errors.
+ UINT32 StatisticsType; /* Enumerator identifying the type of the structure. Values are the same as SMSHOSTLIB_DEVICE_MODES_E
+ * This fiels MUST always first in any statistics structure */
+
+ UINT32 FullSize; /* Total size of the structure returned by the modem. If the size requested by
+ * the host is smaller than FullSize, the struct will be truncated */
+ /* Common parameters */
+ UINT32 IsRfLocked; /* 0 - not locked, 1 - locked */
+ UINT32 IsDemodLocked; /* 0 - not locked, 1 - locked */
+ UINT32 IsExternalLNAOn; /* 0 - external LNA off, 1 - external LNA on */
+
+ /* Reception quality */
+ INT32 SNR; /* dB */
+ UINT32 BER; /* Post Viterbi BER [1E-5] */
+ UINT32 BERErrorCount; /* Number of errornous SYNC bits. */
+ UINT32 BERBitCount; /* Total number of SYNC bits. */
+ UINT32 TS_PER; /* Transport stream PER, 0xFFFFFFFF indicate N/A */
+ UINT32 MFER; /* DVB-H frame error rate in percentage, 0xFFFFFFFF indicate N/A, valid only for DVB-H */
+ INT32 RSSI; /* dBm */
+ INT32 InBandPwr; /* In band power in dBM */
+ INT32 CarrierOffset; /* Carrier Offset in bin/1024 */
+
+ /* Transmission parameters */
+ UINT32 Frequency; /* Frequency in Hz */
+ UINT32 Bandwidth; /* Bandwidth in MHz */
+ UINT32 ModemState; /* from SMSHOSTLIB_DVB_MODEM_STATE_ET */
+ UINT32 TransmissionMode; /* FFT mode carriers in Kilos */
+ UINT32 GuardInterval; /* Guard Interval, 1 divided by value */
+ UINT32 CodeRate; /* Code Rate from SMSHOSTLIB_CODE_RATE_ET */
+ UINT32 LPCodeRate; /* Low Priority Code Rate from SMSHOSTLIB_CODE_RATE_ET */
+ UINT32 Hierarchy; /* Hierarchy from SMSHOSTLIB_HIERARCHY_ET */
+ UINT32 Constellation; /* Constellation from SMSHOSTLIB_CONSTELLATION_ET */
+
+ /* Burst parameters, valid only for DVB-H */
+ UINT32 BurstSize; /* Current burst size in bytes, valid only for DVB-H */
+ UINT32 BurstDuration; /* Current burst duration in mSec, valid only for DVB-H */
+ UINT32 BurstCycleTime; /* Current burst cycle time in mSec, valid only for DVB-H */
+ UINT32 CalculatedBurstCycleTime; /* Current burst cycle time in mSec, as calculated by demodulator, valid only for DVB-H */
+ UINT32 NumOfRows; /* Number of rows in MPE table, valid only for DVB-H */
+ UINT32 NumOfPaddCols; /* Number of padding columns in MPE table, valid only for DVB-H */
+ UINT32 NumOfPunctCols; /* Number of puncturing columns in MPE table, valid only for DVB-H */
+ UINT32 ErrorTSPackets; /* Number of erroneous transport-stream packets */
+ UINT32 TotalTSPackets; /* Total number of transport-stream packets */
+ UINT32 NumOfValidMpeTlbs; /* Number of MPE tables which do not include errors after MPE RS decoding, valid only for DVB-H */
+ UINT32 NumOfInvalidMpeTlbs; /* Number of MPE tables which include errors after MPE RS decoding, valid only for DVB-H */
+ UINT32 NumOfCorrectedMpeTlbs; /* Number of MPE tables which were corrected by MPE RS decoding, valid only for DVB-H */
+ UINT32 NumMPEReceived; /* DVB-H, Num MPE section received */
+
+ /* DVB-H TPS parameters */
+ UINT32 CellId; /* TPS Cell ID in bits 15..0, bits 31..16 zero; if set to 0xFFFFFFFF cell_id not yet recovered */
+ UINT32 DvbhSrvIndHP; /* DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator */
+ UINT32 DvbhSrvIndLP; /* DVB-H service indication info, bit 1 - Time Slicing indicator, bit 0 - MPE-FEC indicator */
+
+ /* Interface information */
+ UINT32 SmsToHostTxErrors; /* Total number of transmission errors. */
} SMSHOSTLIB_STATISTICS_DVB_ST;
typedef struct SMSHOSTLIB_GPIO_CONFIG_S
{
- UINT8 Direction; //!< GPIO direction: Input - 0, Output - 1
- UINT8 PullUpDown; //!< PullUp/PullDown: None - 0, PullDown - 1, PullUp - 2, Keeper - 3
- UINT8 InputCharacteristics; //!< Input Characteristics: Normal - 0, Schmitt trigger - 1
- UINT8 OutputSlewRate; //!< Output Slew Rate: Fast slew rate - 0, Slow slew rate - 1
- UINT8 OutputDriving; //!< Output driving capability: 4mA - 0, 8mA - 1, 12mA - 2, 16mA - 3
+ UINT8 Direction; /* GPIO direction: Input - 0, Output - 1 */
+ UINT8 PullUpDown; /* PullUp/PullDown: None - 0, PullDown - 1, PullUp - 2, Keeper - 3 */
+ UINT8 InputCharacteristics; /* Input Characteristics: Normal - 0, Schmitt trigger - 1 */
+ UINT8 OutputSlewRate; /* Output Slew Rate: Fast slew rate - 0, Slow slew rate - 1 */
+ UINT8 OutputDriving; /* Output driving capability: 4mA - 0, 8mA - 1, 12mA - 2, 16mA - 3 */
} SMSHOSTLIB_GPIO_CONFIG_ST;
typedef struct SMSHOSTLIB_I2C_REQ_S
{
- UINT32 DeviceAddress; // I2c device address
- UINT32 WriteCount; // number of bytes to write
- UINT32 ReadCount; // number of bytes to read
+ UINT32 DeviceAddress; /* I2c device address */
+ UINT32 WriteCount; /* number of bytes to write */
+ UINT32 ReadCount; /* number of bytes to read */
UINT8 Data[1];
} SMSHOSTLIB_I2C_REQ_ST;
typedef struct SMSHOSTLIB_I2C_RES_S
{
- UINT32 Status; // non-zero value in case of failure
- UINT32 ReadCount; // number of bytes read
+ UINT32 Status; /* non-zero value in case of failure */
+ UINT32 ReadCount; /* number of bytes read */
UINT8 Data[1];
} SMSHOSTLIB_I2C_RES_ST;
struct dmxdev dmxdev;
struct dvb_frontend frontend;
- fe_status_t fe_status;
- int fe_ber, fe_snr, fe_signal_strength;
+ fe_status_t fe_status;
+ int fe_ber, fe_snr, fe_signal_strength;
struct completion tune_done, stat_done;
- // todo: save freq/band instead whole struct
+ /* todo: save freq/band instead whole struct */
struct dvb_frontend_parameters fe_params;
} smsdvb_client_t;
extern int smscore_register_hotplug(hotplug_t hotplug);
extern void smscore_unregister_hotplug(hotplug_t hotplug);
-extern int smscore_register_device(smsdevice_params_t *params, smscore_device_t **coredev);
+extern int smscore_register_device(smsdevice_params_t *params,
+ smscore_device_t **coredev);
extern void smscore_unregister_device(smscore_device_t *coredev);
extern int smscore_start_device(smscore_device_t *coredev);
extern int smscore_load_firmware(smscore_device_t *coredev, char *filename,
loadfirmware_t loadfirmware_handler);
-extern int smscore_load_firmware_from_buffer(smscore_device_t *coredev, u8 *buffer, int size, int new_mode);
+extern int smscore_load_firmware_from_buffer(smscore_device_t *coredev,
+ u8 *buffer, int size,
+ int new_mode);
extern int smscore_set_device_mode(smscore_device_t *coredev, int mode);
extern int smscore_get_device_mode(smscore_device_t *coredev);
smscore_client_t **client);
extern void smscore_unregister_client(smscore_client_t *client);
-extern int smsclient_sendrequest(smscore_client_t *client, void *buffer, size_t size);
-extern void smscore_onresponse(smscore_device_t *coredev, smscore_buffer_t *cb);
+extern int smsclient_sendrequest(smscore_client_t *client,
+ void *buffer, size_t size);
+extern void smscore_onresponse(smscore_device_t *coredev,
+ smscore_buffer_t *cb);
extern int smscore_get_common_buffer_size(smscore_device_t *coredev);
extern int smscore_map_common_buffer(smscore_device_t *coredev,
int smsusb_register(void);
void smsusb_unregister(void);
-#endif // __smscoreapi_h__
+#endif /* __smscoreapi_h__ */
smsdvb_client_t *client = (smsdvb_client_t *) context;
SmsMsgHdr_ST *phdr = (SmsMsgHdr_ST *)(((u8 *) cb->p) + cb->offset);
- switch(phdr->msgType)
- {
- case MSG_SMS_DVBT_BDA_DATA:
- dvb_dmx_swfilter(&client->demux, (u8 *)(phdr + 1),
- cb->size - sizeof(SmsMsgHdr_ST));
- break;
+ switch(phdr->msgType) {
+ 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_RF_TUNE_RES:
- complete(&client->tune_done);
- break;
+ case MSG_SMS_GET_STATISTICS_RES:
+ {
+ SmsMsgStatisticsInfo_ST *p =
+ (SmsMsgStatisticsInfo_ST *)(phdr + 1);
- case MSG_SMS_GET_STATISTICS_RES:
+ if (p->Stat.IsDemodLocked)
{
- 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;
- }
+ 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;
- complete(&client->stat_done);
- break;
+ 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);
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;
printk("%s add pid %d(%x)\n", __func__, feed->pid, feed->pid);
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);
+ smsdvb_client_t *client =
+ container_of(feed->demux, smsdvb_client_t, demux);
SmsMsgData_ST PidMsg;
printk("%s remove pid %d(%x)\n", __func__, feed->pid, feed->pid);
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,
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)
{
- 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);
+ 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);
}
static int smsdvb_read_status(struct dvb_frontend *fe, fe_status_t *stat)
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__);
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
{
SmsMsgHdr_ST Msg;
- u32 Data[3];
+ u32 Data[3];
} Msg;
Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
Msg.Data[0] = fep->frequency;
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)
{
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;
}
- 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);
printk("%s\n", __func__);
// todo:
- memcpy(fep, &client->fe_params, sizeof(struct dvb_frontend_parameters));
+ memcpy(fep, &client->fe_params,
+ sizeof(struct dvb_frontend_parameters));
return 0;
}
static struct dvb_frontend_ops smsdvb_fe_ops = {
.info = {
- .name = "Siano Mobile Digital SMS10xx",
- .type = FE_OFDM,
+ .name = "Siano Mobile Digital SMS10xx",
+ .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,
.read_snr = smsdvb_read_snr,
};
-int smsdvb_hotplug(smscore_device_t *coredev, struct device *device,
- int arrival)
+int smsdvb_hotplug(smscore_device_t *coredev,
+ struct device *device, int arrival)
{
smsclient_params_t params;
smsdvb_client_t *client;
if (!arrival)
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__);
return 0;
}
client = kzalloc(sizeof(smsdvb_client_t), GFP_KERNEL);
- if (!client)
- {
+ if (!client) {
printk(KERN_INFO "%s kmalloc() failed\n", __func__);
return -ENOMEM;
}
// register dvb adapter
- rc = dvb_register_adapter(&client->adapter, "Siano Digital Receiver", THIS_MODULE, device, adapter_nr);
- if (rc < 0)
- {
+ 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);
goto adapter_error;
}
client->demux.stop_feed = smsdvb_stop_feed;
rc = dvb_dmx_init(&client->demux);
- if (rc < 0)
- {
+ if (rc < 0) {
printk("%s dvb_dmx_init failed %d\n\n", __func__, rc);
goto dvbdmx_error;
}
client->dmxdev.capabilities = 0;
rc = dvb_dmxdev_init(&client->dmxdev, &client->adapter);
- if (rc < 0)
- {
+ if (rc < 0) {
printk("%s dvb_dmxdev_init failed %d\n", __func__, rc);
goto dmxdev_error;
}
// 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);
- if (rc < 0)
- {
+ if (rc < 0) {
printk("%s frontend registration failed %d\n", __func__, rc);
goto frontend_error;
}
params.context = client;
rc = smscore_register_client(coredev, ¶ms, &client->smsclient);
- if (rc < 0)
- {
- printk(KERN_INFO "%s smscore_register_client() failed %d\n", __func__, rc);
+ if (rc < 0) {
+ printk(KERN_INFO "%s smscore_register_client() failed %d\n",
+ __func__, rc);
goto client_error;
}
kmutex_lock(&g_smsdvb_clientslock);
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);
-
}
-
smsusb_urb_t surbs[MAX_URBS];
- int response_alignment;
- int buffer_size;
+ int response_alignment;
+ int buffer_size;
} *psmsusb_device_t;
int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb);
smsusb_urb_t *surb = (smsusb_urb_t *) urb->context;
smsusb_device_t *dev = surb->dev;
- if (urb->status < 0)
- {
- printk(KERN_INFO "%s error, urb status %d, %d bytes\n", __func__, urb->status, urb->actual_length);
+ if (urb->status < 0) {
+ printk(KERN_INFO "%s error, urb status %d, %d bytes\n",
+ __func__, urb->status, urb->actual_length);
return;
}
- if (urb->actual_length > 0)
- {
+ if (urb->actual_length > 0) {
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;
- if (dev->response_alignment && (phdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG))
- {
- surb->cb->offset = dev->response_alignment + ((phdr->msgFlags >> 8) & 3);
-
- // sanity check
- if (((int) phdr->msgLength + surb->cb->offset) > urb->actual_length)
- {
- printk("%s: invalid response msglen %d offset %d size %d\n", __func__, phdr->msgLength, surb->cb->offset, urb->actual_length);
+ if (dev->response_alignment &&
+ (phdr->msgFlags & MSG_HDR_FLAG_SPLIT_MSG)) {
+
+ surb->cb->offset =
+ dev->response_alignment +
+ ((phdr->msgFlags >> 8) & 3);
+
+ /* 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;
}
- // 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,
phdr, sizeof(SmsMsgHdr_ST));
- }
- else
+ } else
surb->cb->offset = 0;
smscore_onresponse(dev->coredev, surb->cb);
surb->cb = NULL;
- }
- else
- {
- printk("%s invalid response msglen %d actual %d\n", __func__, phdr->msgLength, urb->actual_length);
+ } else {
+ printk(KERN_INFO "%s invalid response "
+ "msglen %d actual %d\n", __func__,
+ phdr->msgLength, urb->actual_length);
}
}
int smsusb_submit_urb(smsusb_device_t *dev, smsusb_urb_t *surb)
{
- if (!surb->cb)
- {
+ if (!surb->cb) {
surb->cb = smscore_getbuffer(dev->coredev);
- if (!surb->cb)
- {
- printk(KERN_INFO "%s smscore_getbuffer(...) returned NULL\n", __func__);
+ if (!surb->cb) {
+ printk(KERN_INFO "%s smscore_getbuffer(...) "
+ "returned NULL\n", __func__);
return -ENOMEM;
}
}
{
int i;
- for (i = 0; i < MAX_URBS; i ++)
- {
+ for (i = 0; i < MAX_URBS; i ++) {
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);
dev->surbs[i].cb = NULL;
}
{
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]);
- if (rc < 0)
- {
- printk(KERN_INFO "%s smsusb_submit_urb(...) failed\n", __func__);
+ if (rc < 0) {
+ printk(KERN_INFO "%s smsusb_submit_urb(...) "
+ "failed\n", __func__);
smsusb_stop_streaming(dev);
break;
}
smsusb_device_t *dev = (smsusb_device_t *) context;
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",
"dvbh_stellar_usb.inp",
"tdmb_stellar_usb.inp",
u8 *fw_buffer;
int rc, dummy;
- if (id < DEVICE_MODE_DVBT || id > DEVICE_MODE_DVBT_BDA)
- {
- printk(KERN_INFO "%s invalid firmware id specified %d\n", __func__, id);
+ if (id < DEVICE_MODE_DVBT || id > DEVICE_MODE_DVBT_BDA) {
+ printk(KERN_INFO "%s invalid firmware id specified %d\n",
+ __func__, id);
return -EINVAL;
}
rc = request_firmware(&fw, smsusb1_fw_lkup[id], &udev->dev);
- if (rc < 0)
- {
- printk(KERN_INFO "%s failed to open \"%s\" mode %d\n", __func__, smsusb1_fw_lkup[id], id);
+ if (rc < 0) {
+ printk(KERN_INFO "%s failed to open \"%s\" mode %d\n",
+ __func__, smsusb1_fw_lkup[id], id);
return rc;
}
fw_buffer = kmalloc(fw->size, GFP_KERNEL);
- if (fw_buffer)
- {
+ if (fw_buffer) {
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);
- }
- else
- {
+ } else {
printk(KERN_INFO "failed to allocate firmware buffer\n");
rc = -ENOMEM;
}
*mode = DEVICE_MODE_NONE;
- if (!product_string)
- {
+ if (!product_string) {
product_string = "none";
printk("%s product string not found\n", __func__);
- }
- else
- {
- if (strstr(product_string, "DVBH"))
- *mode = 1;
- else if (strstr(product_string, "BDA"))
- *mode = 4;
- else if (strstr(product_string, "DVBT"))
- *mode = 0;
- else if (strstr(product_string, "TDMB"))
- *mode = 2;
- }
+ } else if (strstr(product_string, "DVBH"))
+ *mode = 1;
+ else if (strstr(product_string, "BDA"))
+ *mode = 4;
+ else if (strstr(product_string, "DVBT"))
+ *mode = 0;
+ else if (strstr(product_string, "TDMB"))
+ *mode = 2;
printk("%s: %d \"%s\"\n", __func__, *mode, product_string);
}
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)
- {
- printk(KERN_INFO "%s invalid firmware id specified %d\n", __func__, mode);
+ if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_DVBT_BDA) {
+ printk(KERN_INFO "%s invalid firmware id specified %d\n",
+ __func__, mode);
return -EINVAL;
}
{
smsusb_device_t *dev = (smsusb_device_t *) usb_get_intfdata(intf);
- if (dev)
- {
+ if (dev) {
smsusb_stop_streaming(dev);
// unregister from smscore
// create device object
dev = kzalloc(sizeof(smsusb_device_t), GFP_KERNEL);
- if (!dev)
- {
- printk(KERN_INFO "%s kzalloc(sizeof(smsusb_device_t) failed\n", __func__);
+ if (!dev) {
+ printk(KERN_INFO "%s kzalloc(sizeof(smsusb_device_t) failed\n",
+ __func__);
return -ENOMEM;
}
}
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;
break;
params.num_buffers = MAX_BUFFERS;
params.sendrequest_handler = smsusb_sendrequest;
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(¶ms, &dev->coredev);
- if (rc < 0)
- {
- printk(KERN_INFO "%s smscore_register_device(...) failed, rc %d\n", __func__, rc);
+ if (rc < 0) {
+ printk(KERN_INFO "%s smscore_register_device(...) failed, "
+ "rc %d\n", __func__, rc);
smsusb_term_device(intf);
return rc;
}
// initialize urbs
- for (i = 0; i < MAX_URBS; i ++)
- {
+ for (i = 0; i < MAX_URBS; i++) {
dev->surbs[i].dev = dev;
usb_init_urb(&dev->surbs[i].urb);
}
printk(KERN_INFO "%s smsusb_start_streaming(...).\n", __func__);
rc = smsusb_start_streaming(dev);
- if (rc < 0)
- {
- printk(KERN_INFO "%s smsusb_start_streaming(...) failed\n", __func__);
+ if (rc < 0) {
+ printk(KERN_INFO "%s smsusb_start_streaming(...) failed\n",
+ __func__);
smsusb_term_device(intf);
return rc;
}
rc = smscore_start_device(dev->coredev);
- if (rc < 0)
- {
- printk(KERN_INFO "%s smscore_start_device(...) failed\n", __func__);
+ if (rc < 0) {
+ printk(KERN_INFO "%s smscore_start_device(...) failed\n",
+ __func__);
smsusb_term_device(intf);
return rc;
}
rc = usb_clear_halt(udev, usb_rcvbulkpipe(udev, 0x81));
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);
- if (rc < 0)
- {
- printk(KERN_INFO "%s usb_set_interface failed, rc %d\n", __func__, rc);
+ if (rc < 0) {
+ printk(KERN_INFO "%s usb_set_interface failed, "
+ "rc %d\n", __func__, 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 ++)
- 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");
return -ENODEV;
}
- if (intf->cur_altsetting->desc.bInterfaceNumber == 1)
- {
- snprintf(devpath, sizeof(devpath), "usb\\%d-%s", udev->bus->busnum, udev->devpath);
+ if (intf->cur_altsetting->desc.bInterfaceNumber == 1) {
+ snprintf(devpath, sizeof(devpath), "usb\\%d-%s",
+ udev->bus->busnum, udev->devpath);
printk(KERN_INFO "stellar device was found.\n");
return smsusb1_load_firmware(udev, smscore_registry_getmode(devpath));
}
static struct usb_driver smsusb_driver = {
.name = "smsusb",
.probe = smsusb_probe,
- .disconnect = smsusb_disconnect,
+ .disconnect = smsusb_disconnect,
.id_table = smsusb_id_table,
};