Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124249
b: refs/heads/master
c: 76052bc
h: refs/heads/master
i:
  124247: 8e7c065
v: v3
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Dec 29, 2008
1 parent f772096 commit 5fd1773
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c9455fbb159711ca7a2ee5a67f0e7ca43287bbd7
refs/heads/master: 76052bc8688c84628865740e2f82ab41d71a977b
70 changes: 70 additions & 0 deletions trunk/drivers/media/dvb/siano/smscoreapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1187,6 +1187,76 @@ int smsclient_sendrequest(struct smscore_client_t *client,
}


int smscore_configure_gpio(struct smscore_device_t *coredev, u32 pin,
struct smscore_gpio_config *pinconfig)
{
struct {
struct SmsMsgHdr_ST hdr;
u32 data[6];
} msg;

if (coredev->device_flags & SMS_DEVICE_FAMILY2) {
msg.hdr.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
msg.hdr.msgDstId = HIF_TASK;
msg.hdr.msgFlags = 0;
msg.hdr.msgType = MSG_SMS_GPIO_CONFIG_EX_REQ;
msg.hdr.msgLength = sizeof(msg);

msg.data[0] = pin;
msg.data[1] = pinconfig->pullupdown;

/* Convert slew rate for Nova: Fast(0) = 3 / Slow(1) = 0; */
msg.data[2] = pinconfig->outputslewrate == 0 ? 3 : 0;

switch (pinconfig->outputdriving) {
case SMS_GPIO_OUTPUTDRIVING_16mA:
msg.data[3] = 7; /* Nova - 16mA */
break;
case SMS_GPIO_OUTPUTDRIVING_12mA:
msg.data[3] = 5; /* Nova - 11mA */
break;
case SMS_GPIO_OUTPUTDRIVING_8mA:
msg.data[3] = 3; /* Nova - 7mA */
break;
case SMS_GPIO_OUTPUTDRIVING_4mA:
default:
msg.data[3] = 2; /* Nova - 4mA */
break;
}

msg.data[4] = pinconfig->direction;
msg.data[5] = 0;
} else /* TODO: SMS_DEVICE_FAMILY1 */
return -EINVAL;

return coredev->sendrequest_handler(coredev->context,
&msg, sizeof(msg));
}

int smscore_set_gpio(struct smscore_device_t *coredev, u32 pin, int level)
{
struct {
struct SmsMsgHdr_ST hdr;
u32 data[3];
} msg;

if (pin > MAX_GPIO_PIN_NUMBER)
return -EINVAL;

msg.hdr.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
msg.hdr.msgDstId = HIF_TASK;
msg.hdr.msgFlags = 0;
msg.hdr.msgType = MSG_SMS_GPIO_SET_LEVEL_REQ;
msg.hdr.msgLength = sizeof(msg);

msg.data[0] = pin;
msg.data[1] = level ? 1 : 0;
msg.data[2] = 0;

return coredev->sendrequest_handler(coredev->context,
&msg, sizeof(msg));
}

static int __init smscore_module_init(void)
{
int rc = 0;
Expand Down
32 changes: 32 additions & 0 deletions trunk/drivers/media/dvb/siano/smscoreapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ struct smsclient_params_t {
#define MSG_SW_RELOAD_EXEC_REQ 704
#define MSG_SW_RELOAD_EXEC_RES 705
#define MSG_SMS_SPI_INT_LINE_SET_REQ 710
#define MSG_SMS_GPIO_CONFIG_EX_REQ 712
#define MSG_SMS_GPIO_CONFIG_EX_RES 713
#define MSG_SMS_ISDBT_TUNE_REQ 776
#define MSG_SMS_ISDBT_TUNE_RES 777

Expand Down Expand Up @@ -341,6 +343,32 @@ struct SmsMsgStatisticsInfo_ST {
};


struct smscore_gpio_config {
#define SMS_GPIO_DIRECTION_INPUT 0
#define SMS_GPIO_DIRECTION_OUTPUT 1
u8 direction;

#define SMS_GPIO_PULLUPDOWN_NONE 0
#define SMS_GPIO_PULLUPDOWN_PULLDOWN 1
#define SMS_GPIO_PULLUPDOWN_PULLUP 2
#define SMS_GPIO_PULLUPDOWN_KEEPER 3
u8 pullupdown;

#define SMS_GPIO_INPUTCHARACTERISTICS_NORMAL 0
#define SMS_GPIO_INPUTCHARACTERISTICS_SCHMITT 1
u8 inputcharacteristics;

#define SMS_GPIO_OUTPUTSLEWRATE_FAST 0
#define SMS_GPIO_OUTPUTSLEWRATE_SLOW 1
u8 outputslewrate;

#define SMS_GPIO_OUTPUTDRIVING_4mA 0
#define SMS_GPIO_OUTPUTDRIVING_8mA 1
#define SMS_GPIO_OUTPUTDRIVING_12mA 2
#define SMS_GPIO_OUTPUTDRIVING_16mA 3
u8 outputdriving;
};

struct smsdvb_client_t {
struct list_head entry;

Expand Down Expand Up @@ -396,6 +424,10 @@ struct smscore_buffer_t *smscore_getbuffer(struct smscore_device_t *coredev);
extern void smscore_putbuffer(struct smscore_device_t *coredev,
struct smscore_buffer_t *cb);

int smscore_configure_gpio(struct smscore_device_t *coredev, u32 pin,
struct smscore_gpio_config *pinconfig);
int smscore_set_gpio(struct smscore_device_t *coredev, u32 pin, int level);

void smscore_set_board_id(struct smscore_device_t *core, int id);
int smscore_get_board_id(struct smscore_device_t *core);

Expand Down

0 comments on commit 5fd1773

Please sign in to comment.