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