ar71xx_gpiovar.h revision 256281
197403Sobrien/*-
297403Sobrien * Copyright (c) 2009, Oleksandr Tymoshenko <gonzo@FreeBSD.org>
3110614Skan * Copyright (c) 2009, Luiz Otavio O Souza.
497403Sobrien * All rights reserved.
597403Sobrien *
697403Sobrien * Redistribution and use in source and binary forms, with or without
797403Sobrien * modification, are permitted provided that the following conditions
897403Sobrien * are met:
997403Sobrien * 1. Redistributions of source code must retain the above copyright
1097403Sobrien *    notice unmodified, this list of conditions, and the following
1197403Sobrien *    disclaimer.
1297403Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1397403Sobrien *    notice, this list of conditions and the following disclaimer in the
1497403Sobrien *    documentation and/or other materials provided with the distribution.
1597403Sobrien *
1697403Sobrien * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1797403Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1897403Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1997403Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2097403Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2197403Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22169691Skan * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2397403Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2497403Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25132720Skan * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2697403Sobrien * SUCH DAMAGE.
27132720Skan *
28169691Skan * $FreeBSD: stable/10/sys/mips/atheros/ar71xx_gpiovar.h 255335 2013-09-06 23:47:50Z loos $
29132720Skan *
30132720Skan */
31169691Skan
3297403Sobrien#ifndef __AR71XX_GPIOVAR_H__
33169691Skan#define __AR71XX_GPIOVAR_H__
34169691Skan
3597403Sobrien#define GPIO_LOCK(_sc)		mtx_lock(&(_sc)->gpio_mtx)
3697403Sobrien#define GPIO_UNLOCK(_sc)	mtx_unlock(&(_sc)->gpio_mtx)
37117397Skan#define GPIO_LOCK_ASSERT(_sc)	mtx_assert(&(_sc)->gpio_mtx, MA_OWNED)
38117397Skan
39132720Skan/*
40169691Skan * register space access macros
4197403Sobrien */
4297403Sobrien#define GPIO_WRITE(sc, reg, val)	do {	\
4397403Sobrien		bus_write_4(sc->gpio_mem_res, (reg), (val)); \
44117397Skan	} while (0)
45117397Skan
46132720Skan#define GPIO_READ(sc, reg)	 bus_read_4(sc->gpio_mem_res, (reg))
47169691Skan
4897403Sobrien#define GPIO_SET_BITS(sc, reg, bits)	\
4997403Sobrien	GPIO_WRITE(sc, reg, GPIO_READ(sc, (reg)) | (bits))
5097403Sobrien
51117397Skan#define GPIO_CLEAR_BITS(sc, reg, bits)	\
52117397Skan	GPIO_WRITE(sc, reg, GPIO_READ(sc, (reg)) & ~(bits))
53132720Skan
54169691Skan#define	AR71XX_GPIO_PINS	12
5597403Sobrien#define	AR724X_GPIO_PINS	18
5697403Sobrien#define	AR91XX_GPIO_PINS	22
5797403Sobrien
5897403Sobrienstruct ar71xx_gpio_softc {
59132720Skan	device_t		dev;
60132720Skan        struct mtx		gpio_mtx;
61132720Skan        struct resource		*gpio_mem_res;
62132720Skan        int			gpio_mem_rid;
6397403Sobrien        struct resource		*gpio_irq_res;
6497403Sobrien        int			gpio_irq_rid;
6597403Sobrien        void			*gpio_ih;
6697403Sobrien	int			gpio_npins;
6797403Sobrien	struct gpio_pin		*gpio_pins;
6897403Sobrien};
6997403Sobrien
7097403Sobrien#endif	/* __AR71XX_GPIOVAR_H__ */
7197403Sobrien