[BACK]Return to gpioled.c CVS log [TXT][DIR] Up to [local] / funnyos / arch / sam7s64 / dev

Annotation of funnyos/arch/sam7s64/dev/gpioled.c, Revision 1.5

1.1       nbrk        1: /*
1.5     ! nbrk        2:  * $Id: gpioled.c,v 1.4 2007/11/24 19:04:42 nbrk Exp $
1.1       nbrk        3:  */
                      4: #include <sys/types.h>
                      5: #include <sys/device.h>
                      6: #include <sys/gpio.h>
1.5     ! nbrk        7: #include <sys/devctl.h>
1.1       nbrk        8:
1.5     ! nbrk        9: #include <arch/sam7s64/dev/gpioledvar.h>
        !            10: #include <libkern/printf.h>
1.1       nbrk       11: /*
                     12:  * GPIO LED found on my SAM7-P64 development board.
                     13:  */
                     14:
                     15: int    gpioled_attach(struct device *, uint32_t, uint8_t);
1.5     ! nbrk       16: int    gpioled_devctl(struct device *self, uint32_t ctlcmd, void *ctldata);
        !            17:
1.1       nbrk       18:
                     19: struct driver gpioled_dr = {
1.5     ! nbrk       20:        sizeof(struct gpioled_dd),
1.1       nbrk       21:        gpioled_attach,
                     22:        NULL,
                     23:        NULL
                     24: };
                     25:
                     26:
                     27: int
                     28: gpioled_attach(struct device *self, uint32_t loc, uint8_t flags)
                     29: {
1.5     ! nbrk       30:        struct gpioled_dd *ddp = self->dv_devdata;
1.1       nbrk       31:        /* grab parent's gpio_controller */
1.5     ! nbrk       32:        ddp->gld_gcp = self->dv_parent->dv_aux;
1.1       nbrk       33:
1.5     ! nbrk       34:        ddp->gld_pin.gp_pinno = loc;    /* PA17 or PA18 please */
        !            35:        ddp->gld_pin.gp_pio = 1;        /* PIO mode */
        !            36:        ddp->gld_pin.gp_flags = GPIO_PIN_OUTPUT;
        !            37:        ddp->gld_pin.gp_value = 0;      /* LED on */
1.1       nbrk       38:
1.5     ! nbrk       39:        printf("p64 onboard LED (pio pin %d)\n", ddp->gld_pin.gp_pinno);
1.1       nbrk       40:
                     41:        /* talk to gpio controller */
1.5     ! nbrk       42:        ddp->gld_gcp->gc_pinset(ddp->gld_gcp->gc_selfdd, ddp->gld_pin);
        !            43:
        !            44:        devctl_register(self, gpioled_devctl);
        !            45:        return(0);
        !            46: }
        !            47:
        !            48:
        !            49: int
        !            50: gpioled_devctl(struct device *self, uint32_t ctlcmd, void *ctldata)
        !            51: {
        !            52:        struct gpioled_dd *ddp;
        !            53:
        !            54:        ddp = self->dv_devdata;
        !            55:
        !            56:        switch(ctlcmd) {
        !            57:                case(DCGPIOLED_TOGGLE):
        !            58:                        /* toggle LED */
        !            59:                        ddp->gld_pin.gp_value = ~ddp->gld_pin.gp_value & 0x01;
        !            60:
        !            61:                        /* update us using our gpio controller */
        !            62:                        ddp->gld_gcp->gc_pinset(ddp->gld_gcp->gc_selfdd, ddp->gld_pin);
        !            63:                default:
        !            64:                        break;
        !            65:        }
1.1       nbrk       66:
                     67:        return(0);
                     68: }
                     69:

CVSweb