|
@@ -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)
|
|
|
{
|