Example #1
0
static int timer_config(struct simio_device *dev,
                        const char *param, char **arg_text)
{
    struct timer *tr = (struct timer *)dev;

    if (!strcasecmp(param, "base"))
        return config_addr(&tr->base_addr, arg_text);
    if (!strcasecmp(param, "iv"))
        return config_addr(&tr->iv_addr, arg_text);
    if (!strcasecmp(param, "irq0"))
        return config_irq(&tr->irq0, arg_text);
    if (!strcasecmp(param, "irq1"))
        return config_irq(&tr->irq1, arg_text);
    if (!strcasecmp(param, "set"))
        return config_channel(tr, arg_text);

    printc_err("timer: config: unknown parameter: %s\n", param);
    return -1;
}
Example #2
0
/*
 *  pin:    pin 0-9
 *  type:   NULL/IN/OUT/IRQ
 *  value:  
 *          IN:     value=0
 *          OUT:    value=0/1   reset value
 *          IRQ:    value={emun irq_trigger_type}
 */
static int config_pin(int n, enum pin_type type, int value) {

    int ret=-1;

    if(n<0 || n > 9 || type < 0 || type > 3 || value < 0 || value > 2) {
        printk("config pin params error\n");
        return -1;
    }

    printk("config pin n=%d type=%d value=%d\n", n, type, value);
    if(type == PIN_TYPE_NULL) {

        if(pin_type[n] == PIN_TYPE_IRQ) {
            if(n == 2) {
                free_irq(irq1, vdev_dev);
            } else if(n == 7) {
                free_irq(irq2, vdev_dev);
            } else if (n == 90) {
                free_irq(irq3, vdev_dev);
            }
        }
        ret = pinctrl_select_state(pinctrl, pin_in[n]);
        if(ret<0) {
            printk("pinctrl select state pin null[%d] error \n", n);
            return -1;
        }
        gpio_direction_input(pin[n]);
        pin_type[n] = PIN_TYPE_NULL;
        return 0;
    }

    if(type ==  PIN_TYPE_IN) {
        ret = pinctrl_select_state(pinctrl, pin_in[n]);
        if(ret<0) {
            printk("pinctrl select state pin in[%d] error\n", n);
            return -1;
        }
        gpio_direction_input(pin[n]);
        pin_type[n] = PIN_TYPE_IN;
        return 0;
    }

    if(type ==  PIN_TYPE_OUT) {
        ret = pinctrl_select_state(pinctrl, pin_out[n]);
        if(ret<0) {
            printk("pinctrl select state pin out[%d] error \n", n);
            return -1;
        }
        gpio_direction_output(pin[n], value>0?1:0);
        pin_type[n] = PIN_TYPE_OUT;
        return 0;
    }

    if(type ==  PIN_TYPE_IRQ && (n == 2 || n == 7 || n == 9)) {

        config_irq(n, value);
        pin_type[n] = PIN_TYPE_IRQ;
        return 0;
    }
    
    return ret;
}