Deleted Added
sdiff udiff text old ( 255334 ) new ( 255335 )
full compact
1/*-
2 * Copyright (c) 2009, Oleksandr Tymoshenko <gonzo@FreeBSD.org>
3 * Copyright (c) 2009, Luiz Otavio O Souza.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 17 unchanged lines hidden (view full) ---

26 * SUCH DAMAGE.
27 */
28
29/*
30 * GPIO driver for AR71xx
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/sys/mips/atheros/ar71xx_gpio.c 255335 2013-09-06 23:47:50Z loos $");
35
36#include <sys/param.h>
37#include <sys/systm.h>
38#include <sys/bus.h>
39
40#include <sys/kernel.h>
41#include <sys/module.h>
42#include <sys/rman.h>
43#include <sys/lock.h>
44#include <sys/malloc.h>
45#include <sys/mutex.h>
46#include <sys/gpio.h>
47
48#include <machine/bus.h>
49#include <machine/resource.h>
50#include <mips/atheros/ar71xxreg.h>
51#include <mips/atheros/ar71xx_setup.h>
52#include <mips/atheros/ar71xx_gpiovar.h>

--- 361 unchanged lines hidden (view full) ---

414 (void) ar71xx_gpio_pin_max(dev, &maxpin);
415 if (resource_int_value(device_get_name(dev), device_get_unit(dev),
416 "pinmask", &mask) != 0)
417 mask = 0;
418 if (resource_int_value(device_get_name(dev), device_get_unit(dev),
419 "pinon", &pinon) != 0)
420 pinon = 0;
421 device_printf(dev, "gpio pinmask=0x%x\n", mask);
422 for (j = 0; j <= maxpin; j++) {
423 if ((mask & (1 << j)) == 0)
424 continue;
425 sc->gpio_npins++;
426 }
427 sc->gpio_pins = malloc(sizeof(*sc->gpio_pins) * sc->gpio_npins,
428 M_DEVBUF, M_WAITOK | M_ZERO);
429 for (i = 0, j = 0; j <= maxpin; j++) {
430 if ((mask & (1 << j)) == 0)
431 continue;
432 snprintf(sc->gpio_pins[i].gp_name, GPIOMAXNAME,
433 "pin %d", j);
434 sc->gpio_pins[i].gp_pin = j;
435 sc->gpio_pins[i].gp_caps = DEFAULT_CAPS;
436 sc->gpio_pins[i].gp_flags = 0;
437 ar71xx_gpio_pin_configure(sc, &sc->gpio_pins[i], DEFAULT_CAPS);
438 i++;
439 }
440 for (i = 0; i < sc->gpio_npins; i++) {
441 j = sc->gpio_pins[i].gp_pin;
442 if ((pinon & (1 << j)) != 0)
443 ar71xx_gpio_pin_set(dev, j, 1);
444 }
445 device_add_child(dev, "gpioc", device_get_unit(dev));
446 device_add_child(dev, "gpiobus", device_get_unit(dev));
447 return (bus_generic_attach(dev));

--- 9 unchanged lines hidden (view full) ---

457 ar71xx_gpio_function_disable(sc, GPIO_FUNC_SPI_CS1_EN);
458 ar71xx_gpio_function_disable(sc, GPIO_FUNC_SPI_CS2_EN);
459 bus_generic_detach(dev);
460
461 if (sc->gpio_mem_res)
462 bus_release_resource(dev, SYS_RES_MEMORY, sc->gpio_mem_rid,
463 sc->gpio_mem_res);
464
465 free(sc->gpio_pins, M_DEVBUF);
466 mtx_destroy(&sc->gpio_mtx);
467
468 return(0);
469}
470
471static device_method_t ar71xx_gpio_methods[] = {
472 DEVMETHOD(device_probe, ar71xx_gpio_probe),
473 DEVMETHOD(device_attach, ar71xx_gpio_attach),

--- 22 unchanged lines hidden ---