dect
/
linux-2.6
Archived
13
0
Fork 0

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:
Uri Shkolnik 2009-05-19 12:18:40 -03:00 committed by Mauro Carvalho Chehab
parent 4887f7b4ef
commit 5b8db89783
2 changed files with 191 additions and 0 deletions

View File

@ -104,6 +104,173 @@ struct sms_board *sms_get_board(int id)
return &sms_boards[id];
}
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)
{

View File

@ -85,6 +85,30 @@ struct sms_board *sms_get_board(int id);
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);
#define SMS_LED_OFF 0