• Home
  • Raw
  • Download

Lines Matching +full:gpo +full:- +full:config +full:-

22  * MA 02111-1307 USA
39 * GPO 0...12 General Purpose Output
40 * GPIO 0...14 General Purpose I/O (Open-Drain)
92 * 14..26 GPO 0..12
107 /* Real GPO bits cannot be put in output direction */ in vx855gpio_direction_input()
109 return -EINVAL; in vx855gpio_direction_input()
112 spin_lock_irqsave(&vg->lock, flags); in vx855gpio_direction_input()
113 reg_out = inl(vg->io_gpo); in vx855gpio_direction_input()
114 reg_out |= gpio_o_bit(nr - NR_VX855_GPInO); in vx855gpio_direction_input()
115 outl(reg_out, vg->io_gpo); in vx855gpio_direction_input()
116 spin_unlock_irqrestore(&vg->lock, flags); in vx855gpio_direction_input()
128 reg_in = inl(vg->io_gpi); in vx855gpio_get()
132 /* GPO don't have an input bit, we need to read it in vx855gpio_get()
134 reg_in = inl(vg->io_gpo); in vx855gpio_get()
135 if (reg_in & gpo_o_bit(nr - NR_VX855_GPI)) in vx855gpio_get()
138 reg_in = inl(vg->io_gpi); in vx855gpio_get()
139 if (reg_in & gpio_i_bit(nr - NR_VX855_GPInO)) in vx855gpio_get()
157 spin_lock_irqsave(&vg->lock, flags); in vx855gpio_set()
158 reg_out = inl(vg->io_gpo); in vx855gpio_set()
161 reg_out |= gpo_o_bit(nr - NR_VX855_GPI); in vx855gpio_set()
163 reg_out &= ~gpo_o_bit(nr - NR_VX855_GPI); in vx855gpio_set()
166 reg_out |= gpio_o_bit(nr - NR_VX855_GPInO); in vx855gpio_set()
168 reg_out &= ~gpio_o_bit(nr - NR_VX855_GPInO); in vx855gpio_set()
170 outl(reg_out, vg->io_gpo); in vx855gpio_set()
171 spin_unlock_irqrestore(&vg->lock, flags); in vx855gpio_set()
179 return -EINVAL; in vx855gpio_direction_output()
181 /* True GPO don't need to be switched to output mode, in vx855gpio_direction_output()
182 * and GPIO are open-drain, i.e. also need no switching, in vx855gpio_direction_output()
190 unsigned long config) in vx855gpio_set_config() argument
192 enum pin_config_param param = pinconf_to_config_param(config); in vx855gpio_set_config()
194 /* The GPI cannot be single-ended */ in vx855gpio_set_config()
196 return -EINVAL; in vx855gpio_set_config()
198 /* The GPO's are push-pull */ in vx855gpio_set_config()
201 return -ENOTSUPP; in vx855gpio_set_config()
207 return -ENOTSUPP; in vx855gpio_set_config()
227 struct gpio_chip *c = &vg->gpio; in vx855gpio_gpio_setup()
229 c->label = "VX855 South Bridge"; in vx855gpio_gpio_setup()
230 c->owner = THIS_MODULE; in vx855gpio_gpio_setup()
231 c->direction_input = vx855gpio_direction_input; in vx855gpio_gpio_setup()
232 c->direction_output = vx855gpio_direction_output; in vx855gpio_gpio_setup()
233 c->get = vx855gpio_get; in vx855gpio_gpio_setup()
234 c->set = vx855gpio_set; in vx855gpio_gpio_setup()
235 c->set_config = vx855gpio_set_config, in vx855gpio_gpio_setup()
236 c->dbg_show = NULL; in vx855gpio_gpio_setup()
237 c->base = 0; in vx855gpio_gpio_setup()
238 c->ngpio = NR_VX855_GP; in vx855gpio_gpio_setup()
239 c->can_sleep = false; in vx855gpio_gpio_setup()
240 c->names = vx855gpio_names; in vx855gpio_gpio_setup()
253 return -EBUSY; in vx855gpio_probe()
255 vg = devm_kzalloc(&pdev->dev, sizeof(*vg), GFP_KERNEL); in vx855gpio_probe()
257 return -ENOMEM; in vx855gpio_probe()
261 dev_info(&pdev->dev, "found VX855 GPIO controller\n"); in vx855gpio_probe()
262 vg->io_gpi = res_gpi->start; in vx855gpio_probe()
263 vg->io_gpo = res_gpo->start; in vx855gpio_probe()
264 spin_lock_init(&vg->lock); in vx855gpio_probe()
268 * and in the case of the OLPC XO-1.5, some of those ports are used in vx855gpio_probe()
274 if (!devm_request_region(&pdev->dev, res_gpi->start, in vx855gpio_probe()
276 dev_warn(&pdev->dev, in vx855gpio_probe()
279 if (!devm_request_region(&pdev->dev, res_gpo->start, in vx855gpio_probe()
281 dev_warn(&pdev->dev, in vx855gpio_probe()
282 "GPO I/O resource busy, probably claimed by ACPI\n"); in vx855gpio_probe()
286 return devm_gpiochip_add_data(&pdev->dev, &vg->gpio, vg); in vx855gpio_probe()