};
extern struct sys_timer rk2818_timer;
+#define POWER_PIN RK2818_PIN_PA3
+static void rk2818_power_on(void)
+{
+ int ret;
+ ret = gpio_request(POWER_PIN, NULL);
+ if (ret) {
+ printk("failed to request power_off gpio\n");
+ goto err_free_gpio;
+ }
+
+ gpio_pull_updown(POWER_PIN, GPIOPullUp);
+ ret = gpio_direction_output(POWER_PIN, GPIO_HIGH);
+ if (ret) {
+ printk("failed to set power_off gpio output\n");
+ goto err_free_gpio;
+ }
+
+ gpio_set_value(POWER_PIN, 1);/*power on*/
+
+err_free_gpio:
+ gpio_free(POWER_PIN);
+}
+
+static void rk2818_power_off(void)
+{
+ printk("shut down system now ...\n");
+ gpio_set_value(POWER_PIN, 0);/*power down*/
+}
static void __init machine_rk2818_init_irq(void)
{
static void __init machine_rk2818_board_init(void)
{
+ rk2818_power_on();
+ pm_power_off = rk2818_power_off;
#ifdef CONFIG_I2C0_RK2818
i2c_register_board_info(default_i2c0_data.bus_num, board_i2c0_devices,
ARRAY_SIZE(board_i2c0_devices));
return 0;
}
-static irqreturn_t rk2818_playkey_irq(int irq, void *handle)
+static irqreturn_t rk28_playkey_irq(int irq, void *handle)
{
input_report_key(pRk28AdcKey->input_dev,KEYSTART,1);
input_sync(pRk28AdcKey->input_dev);
return IRQ_HANDLED;
}
+
+void rk28_send_wakeup_key( void )
+{
+ input_report_key(pRk28AdcKey->input_dev,KEY_WAKEUP,1);
+ input_sync(pRk28AdcKey->input_dev);
+ input_report_key(pRk28AdcKey->input_dev,KEY_WAKEUP,0);
+ input_sync(pRk28AdcKey->input_dev);
+}
+
static int rk28_adckey_open(struct input_dev *dev)
{
//struct rk28_adckey *adckey = input_get_drvdata(dev);
}
gpio_pull_updown(KEY_PLAYON_PIN,GPIOPullUp);
- error = request_irq(gpio_to_irq(KEY_PLAYON_PIN),rk2818_playkey_irq,IRQF_TRIGGER_FALLING,NULL,NULL);
+ error = request_irq(gpio_to_irq(KEY_PLAYON_PIN),rk28_playkey_irq,IRQF_TRIGGER_FALLING,NULL,NULL);
if(error)
{
printk("unable to request play key irq\n");