/*
 * Copyright (C) ST-Ericsson SA 2010
 *
 * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
 * License terms: GNU General Public License (GPL), version 2
 */

#ifndef __MACH_UX500_PINS_H
#define __MACH_UX500_PINS_H

#include <linux/list.h>

#define PIN_LOOKUP(_name, _pins)	\
{					\
	.name	= _name,		\
	.pins	= _pins,		\
}

#define UX500_PINS(name, pins...)			\
struct ux500_pins name = {				\
	.cfg = (pin_cfg_t[]) {pins},			\
	.num = ARRAY_SIZE(((pin_cfg_t[]) {pins})),	\
}

struct ux500_pins {
	int usage;
	int num;
	pin_cfg_t *cfg;
};

struct ux500_pin_lookup {
	struct list_head	node;
	const char		*name;
	struct ux500_pins	*pins;
};

void __init ux500_pins_add(struct ux500_pin_lookup *pl, size_t num);
struct ux500_pins *ux500_pins_get(const char *name);
int ux500_pins_enable(struct ux500_pins *pins);
int ux500_pins_disable(struct ux500_pins *pins);
void ux500_pins_put(struct ux500_pins *pins);
int pins_for_u9500(void);

#endif
