V4L/DVB (9734): sms1xxx: add functions to configure and set gpio
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
c9455fbb15
Коммит
76052bc868
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче