1/* linux/arch/arm/plat-s3c/include/plat/gpio-cfg-helper.h 2 * 3 * Copyright 2008 Openmoko, Inc. 4 * Copyright 2008 Simtec Electronics 5 * http://armlinux.simtec.co.uk/ 6 * Ben Dooks <ben@simtec.co.uk> 7 * 8 * S3C Platform - GPIO pin configuration helper definitions 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13*/ 14 15/* This is meant for core cpu support, machine or other driver files 16 * should not be including this header. 17 */ 18 19#ifndef __PLAT_GPIO_CFG_HELPERS_H 20#define __PLAT_GPIO_CFG_HELPERS_H __FILE__ 21 22/* As a note, all gpio configuration functions are entered exclusively, either 23 * with the relevant lock held or the system prevented from doing anything else 24 * by disabling interrupts. 25*/ 26 27static inline int s3c_gpio_do_setcfg(struct s3c_gpio_chip *chip, 28 unsigned int off, unsigned int config) 29{ 30 return (chip->config->set_config)(chip, off, config); 31} 32 33static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip, 34 unsigned int off, s3c_gpio_pull_t pull) 35{ 36 return (chip->config->set_pull)(chip, off, pull); 37} 38 39/** 40 * s3c_gpio_setcfg_s3c24xx - S3C24XX style GPIO configuration. 41 * @chip: The gpio chip that is being configured. 42 * @off: The offset for the GPIO being configured. 43 * @cfg: The configuration value to set. 44 * 45 * This helper deal with the GPIO cases where the control register 46 * has two bits of configuration per gpio, which have the following 47 * functions: 48 * 00 = input 49 * 01 = output 50 * 1x = special function 51*/ 52extern int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip, 53 unsigned int off, unsigned int cfg); 54 55/** 56 * s3c_gpio_setcfg_s3c24xx_a - S3C24XX style GPIO configuration (Bank A) 57 * @chip: The gpio chip that is being configured. 58 * @off: The offset for the GPIO being configured. 59 * @cfg: The configuration value to set. 60 * 61 * This helper deal with the GPIO cases where the control register 62 * has one bit of configuration for the gpio, where setting the bit 63 * means the pin is in special function mode and unset means output. 64*/ 65extern int s3c_gpio_setcfg_s3c24xx_a(struct s3c_gpio_chip *chip, 66 unsigned int off, unsigned int cfg); 67 68/** 69 * s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config. 70 * @chip: The gpio chip that is being configured. 71 * @off: The offset for the GPIO being configured. 72 * @cfg: The configuration value to set. 73 * 74 * This helper deal with the GPIO cases where the control register has 4 bits 75 * of control per GPIO, generally in the form of: 76 * 0000 = Input 77 * 0001 = Output 78 * others = Special functions (dependant on bank) 79 * 80 * Note, since the code to deal with the case where there are two control 81 * registers instead of one, we do not have a seperate set of functions for 82 * each case. 83*/ 84extern int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip, 85 unsigned int off, unsigned int cfg); 86 87 88/* Pull-{up,down} resistor controls. 89 * 90 * S3C2410,S3C2440,S3C24A0 = Pull-UP, 91 * S3C2412,S3C2413 = Pull-Down 92 * S3C6400,S3C6410 = Pull-Both [None,Down,Up,Undef] 93 * S3C2443 = Pull-Both [not same as S3C6400] 94 */ 95 96/** 97 * s3c_gpio_setpull_1up() - Pull configuration for choice of up or none. 98 * @chip: The gpio chip that is being configured. 99 * @off: The offset for the GPIO being configured. 100 * @param: pull: The pull mode being requested. 101 * 102 * This is a helper function for the case where we have GPIOs with one 103 * bit configuring the presence of a pull-up resistor. 104 */ 105extern int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip, 106 unsigned int off, s3c_gpio_pull_t pull); 107 108/** 109 * s3c_gpio_setpull_1down() - Pull configuration for choice of down or none 110 * @chip: The gpio chip that is being configured 111 * @off: The offset for the GPIO being configured 112 * @param: pull: The pull mode being requested 113 * 114 * This is a helper function for the case where we have GPIOs with one 115 * bit configuring the presence of a pull-down resistor. 116 */ 117extern int s3c_gpio_setpull_1down(struct s3c_gpio_chip *chip, 118 unsigned int off, s3c_gpio_pull_t pull); 119 120/** 121 * s3c_gpio_setpull_upown() - Pull configuration for choice of up, down or none 122 * @chip: The gpio chip that is being configured. 123 * @off: The offset for the GPIO being configured. 124 * @param: pull: The pull mode being requested. 125 * 126 * This is a helper function for the case where we have GPIOs with two 127 * bits configuring the presence of a pull resistor, in the following 128 * order: 129 * 00 = No pull resistor connected 130 * 01 = Pull-up resistor connected 131 * 10 = Pull-down resistor connected 132 */ 133extern int s3c_gpio_setpull_updown(struct s3c_gpio_chip *chip, 134 unsigned int off, s3c_gpio_pull_t pull); 135 136 137/** 138 * s3c_gpio_getpull_updown() - Get configuration for choice of up, down or none 139 * @chip: The gpio chip that the GPIO pin belongs to 140 * @off: The offset to the pin to get the configuration of. 141 * 142 * This helper function reads the state of the pull-{up,down} resistor for the 143 * given GPIO in the same case as s3c_gpio_setpull_upown. 144*/ 145extern s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip, 146 unsigned int off); 147 148/** 149 * s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443. 150 * @chip: The gpio chip that is being configured. 151 * @off: The offset for the GPIO being configured. 152 * @param: pull: The pull mode being requested. 153 * 154 * This is a helper function for the case where we have GPIOs with two 155 * bits configuring the presence of a pull resistor, in the following 156 * order: 157 * 00 = Pull-up resistor connected 158 * 10 = Pull-down resistor connected 159 * x1 = No pull up resistor 160 */ 161extern int s3c_gpio_setpull_s3c2443(struct s3c_gpio_chip *chip, 162 unsigned int off, s3c_gpio_pull_t pull); 163 164/** 165 * s3c_gpio_getpull_s3c2443() - Get configuration for s3c2443 pull resistors 166 * @chip: The gpio chip that the GPIO pin belongs to. 167 * @off: The offset to the pin to get the configuration of. 168 * 169 * This helper function reads the state of the pull-{up,down} resistor for the 170 * given GPIO in the same case as s3c_gpio_setpull_upown. 171*/ 172extern s3c_gpio_pull_t s3c_gpio_getpull_s3c24xx(struct s3c_gpio_chip *chip, 173 unsigned int off); 174 175#endif /* __PLAT_GPIO_CFG_HELPERS_H */ 176 177