V4L/DVB (11887): Siano: smscards - add board (target) events
Add events handling for targets. All board-specific (target specific) should reside here. Signed-off-by: Uri Shkolnik <uris@siano-ms.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
4887f7b4ef
commit
5b8db89783
|
@ -104,6 +104,173 @@ struct sms_board *sms_get_board(int id)
|
||||||
return &sms_boards[id];
|
return &sms_boards[id];
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sms_get_board);
|
EXPORT_SYMBOL_GPL(sms_get_board);
|
||||||
|
static inline void sms_gpio_assign_11xx_default_led_config(
|
||||||
|
struct smscore_gpio_config *pGpioConfig) {
|
||||||
|
pGpioConfig->Direction = SMS_GPIO_DIRECTION_OUTPUT;
|
||||||
|
pGpioConfig->InputCharacteristics =
|
||||||
|
SMS_GPIO_INPUT_CHARACTERISTICS_NORMAL;
|
||||||
|
pGpioConfig->OutputDriving = SMS_GPIO_OUTPUT_DRIVING_4mA;
|
||||||
|
pGpioConfig->OutputSlewRate = SMS_GPIO_OUTPUT_SLEW_RATE_0_45_V_NS;
|
||||||
|
pGpioConfig->PullUpDown = SMS_GPIO_PULL_UP_DOWN_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sms_board_event(struct smscore_device_t *coredev,
|
||||||
|
enum SMS_BOARD_EVENTS gevent) {
|
||||||
|
int board_id = smscore_get_board_id(coredev);
|
||||||
|
struct sms_board *board = sms_get_board(board_id);
|
||||||
|
struct smscore_gpio_config MyGpioConfig;
|
||||||
|
|
||||||
|
sms_gpio_assign_11xx_default_led_config(&MyGpioConfig);
|
||||||
|
|
||||||
|
switch (gevent) {
|
||||||
|
case BOARD_EVENT_POWER_INIT: /* including hotplug */
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
/* set I/O and turn off all LEDs */
|
||||||
|
smscore_gpio_configure(coredev,
|
||||||
|
board->board_cfg.leds_power,
|
||||||
|
&MyGpioConfig);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.leds_power, 0);
|
||||||
|
smscore_gpio_configure(coredev, board->board_cfg.led0,
|
||||||
|
&MyGpioConfig);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led0, 0);
|
||||||
|
smscore_gpio_configure(coredev, board->board_cfg.led1,
|
||||||
|
&MyGpioConfig);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 0);
|
||||||
|
break;
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2:
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD:
|
||||||
|
/* set I/O and turn off LNA */
|
||||||
|
smscore_gpio_configure(coredev,
|
||||||
|
board->board_cfg.foreign_lna0_ctrl,
|
||||||
|
&MyGpioConfig);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.foreign_lna0_ctrl,
|
||||||
|
0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_BIND */
|
||||||
|
|
||||||
|
case BOARD_EVENT_POWER_SUSPEND:
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.leds_power, 0);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led0, 0);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 0);
|
||||||
|
break;
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2:
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.foreign_lna0_ctrl,
|
||||||
|
0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_POWER_SUSPEND */
|
||||||
|
|
||||||
|
case BOARD_EVENT_POWER_RESUME:
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.leds_power, 1);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led0, 1);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 0);
|
||||||
|
break;
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2:
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.foreign_lna0_ctrl,
|
||||||
|
1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_POWER_RESUME */
|
||||||
|
|
||||||
|
case BOARD_EVENT_BIND:
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.leds_power, 1);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led0, 1);
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 0);
|
||||||
|
break;
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2:
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.foreign_lna0_ctrl,
|
||||||
|
1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_BIND */
|
||||||
|
|
||||||
|
case BOARD_EVENT_SCAN_PROG:
|
||||||
|
break; /* BOARD_EVENT_SCAN_PROG */
|
||||||
|
case BOARD_EVENT_SCAN_COMP:
|
||||||
|
break; /* BOARD_EVENT_SCAN_COMP */
|
||||||
|
case BOARD_EVENT_EMERGENCY_WARNING_SIGNAL:
|
||||||
|
break; /* BOARD_EVENT_EMERGENCY_WARNING_SIGNAL */
|
||||||
|
case BOARD_EVENT_FE_LOCK:
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_FE_LOCK */
|
||||||
|
case BOARD_EVENT_FE_UNLOCK:
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_FE_UNLOCK */
|
||||||
|
case BOARD_EVENT_DEMOD_LOCK:
|
||||||
|
break; /* BOARD_EVENT_DEMOD_LOCK */
|
||||||
|
case BOARD_EVENT_DEMOD_UNLOCK:
|
||||||
|
break; /* BOARD_EVENT_DEMOD_UNLOCK */
|
||||||
|
case BOARD_EVENT_RECEPTION_MAX_4:
|
||||||
|
break; /* BOARD_EVENT_RECEPTION_MAX_4 */
|
||||||
|
case BOARD_EVENT_RECEPTION_3:
|
||||||
|
break; /* BOARD_EVENT_RECEPTION_3 */
|
||||||
|
case BOARD_EVENT_RECEPTION_2:
|
||||||
|
break; /* BOARD_EVENT_RECEPTION_2 */
|
||||||
|
case BOARD_EVENT_RECEPTION_1:
|
||||||
|
break; /* BOARD_EVENT_RECEPTION_1 */
|
||||||
|
case BOARD_EVENT_RECEPTION_LOST_0:
|
||||||
|
break; /* BOARD_EVENT_RECEPTION_LOST_0 */
|
||||||
|
case BOARD_EVENT_MULTIPLEX_OK:
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_MULTIPLEX_OK */
|
||||||
|
case BOARD_EVENT_MULTIPLEX_ERRORS:
|
||||||
|
switch (board_id) {
|
||||||
|
case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM:
|
||||||
|
smscore_gpio_set_level(coredev,
|
||||||
|
board->board_cfg.led1, 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break; /* BOARD_EVENT_MULTIPLEX_ERRORS */
|
||||||
|
|
||||||
|
default:
|
||||||
|
sms_err("Unknown SMS board event");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(sms_board_event);
|
||||||
|
|
||||||
static int sms_set_gpio(struct smscore_device_t *coredev, int pin, int enable)
|
static int sms_set_gpio(struct smscore_device_t *coredev, int pin, int enable)
|
||||||
{
|
{
|
||||||
|
|
|
@ -85,6 +85,30 @@ struct sms_board *sms_get_board(int id);
|
||||||
|
|
||||||
extern struct smscore_device_t *coredev;
|
extern struct smscore_device_t *coredev;
|
||||||
|
|
||||||
|
enum SMS_BOARD_EVENTS {
|
||||||
|
BOARD_EVENT_POWER_INIT,
|
||||||
|
BOARD_EVENT_POWER_SUSPEND,
|
||||||
|
BOARD_EVENT_POWER_RESUME,
|
||||||
|
BOARD_EVENT_BIND,
|
||||||
|
BOARD_EVENT_SCAN_PROG,
|
||||||
|
BOARD_EVENT_SCAN_COMP,
|
||||||
|
BOARD_EVENT_EMERGENCY_WARNING_SIGNAL,
|
||||||
|
BOARD_EVENT_FE_LOCK,
|
||||||
|
BOARD_EVENT_FE_UNLOCK,
|
||||||
|
BOARD_EVENT_DEMOD_LOCK,
|
||||||
|
BOARD_EVENT_DEMOD_UNLOCK,
|
||||||
|
BOARD_EVENT_RECEPTION_MAX_4,
|
||||||
|
BOARD_EVENT_RECEPTION_3,
|
||||||
|
BOARD_EVENT_RECEPTION_2,
|
||||||
|
BOARD_EVENT_RECEPTION_1,
|
||||||
|
BOARD_EVENT_RECEPTION_LOST_0,
|
||||||
|
BOARD_EVENT_MULTIPLEX_OK,
|
||||||
|
BOARD_EVENT_MULTIPLEX_ERRORS
|
||||||
|
};
|
||||||
|
|
||||||
|
int sms_board_event(struct smscore_device_t *coredev,
|
||||||
|
enum SMS_BOARD_EVENTS gevent);
|
||||||
|
|
||||||
int sms_board_setup(struct smscore_device_t *coredev);
|
int sms_board_setup(struct smscore_device_t *coredev);
|
||||||
|
|
||||||
#define SMS_LED_OFF 0
|
#define SMS_LED_OFF 0
|
||||||
|
|
Reference in New Issue