Ejemplo n.º 1
0
static void pixcir_early_suspend(struct early_suspend *handler)
{
    struct pixcir_data *pixcir = container_of(handler, struct pixcir_data, early_suspend);
    pixcir->earlysus = 1;
	gpio_disable_irq(pixcir->igp_idx, pixcir->igp_bit);
    return;
}
Ejemplo n.º 2
0
static int32_t config_gpio_event(uint8_t cmd_type, iotlab_packet_t* packet)
{
     /*
     * Expected packet format is (length:2B:
     *      * Start / Stop mode         [1B]
     *      * GPIOs (PPS|GPIO1|GPIO2)    [1B]
     */

    packet_t* pkt = (packet_t*) packet;
    if (pkt->length != 2)
        return 1;

    uint8_t mode  = pkt->data[0];
    uint8_t gpios = pkt->data[1];
    (void)gpios;

    if (mode == STOP) {
        gpio_disable_irq(&gpio_config[3]);
        return 0;
    } else {
        gpio_enable_irq(&gpio_config[3], IRQ_RISING, pps_handler_irq, NULL);
        return 0;
    }

}
Ejemplo n.º 3
0
static int cmd_test_pps_stop(char *command)
{
    if (strcmp(command, "test_pps_stop"))
        return 1;
    // third gpio line
    seconds = 0;
    gpio_disable_irq(&gpio_config[3]);
    printf("ACK test_pps_stop\n");
    return 0;
}
Ejemplo n.º 4
0
static irqreturn_t pixcir_isr_handler(int irq, void *dev)
{
    struct pixcir_data *pixcir = dev;

    if (!gpio_irq_isenable(pixcir->igp_idx, pixcir->igp_bit) ||
        !gpio_irq_state(pixcir->igp_idx, pixcir->igp_bit))
		return IRQ_NONE;
    
    gpio_disable_irq(pixcir->igp_idx, pixcir->igp_bit);    
	queue_delayed_work(pixcir->workqueue, &pixcir->read_work,0);
		
	return IRQ_HANDLED;
}
Ejemplo n.º 5
0
static int pixcir_remove(struct platform_device *pdev)
{
    struct pixcir_data *pixcir = platform_get_drvdata(pdev);

    cancel_delayed_work_sync(&pixcir->read_work);
    flush_workqueue(pixcir->workqueue);
	destroy_workqueue(pixcir->workqueue);
    
    free_irq(pixcir->irq, pixcir);
    gpio_disable_irq(pixcir->igp_idx, pixcir->igp_bit);
    
    unregister_early_suspend(&pixcir->early_suspend);
	input_unregister_device(pixcir->input_dev);

    pixcir_sysfs_remove_group(pixcir, &pixcir_group);
    //kfree(pixcir);
    
	dbg("remove...\n");
	return 0;
}