Lines Matching refs:bus

33 	struct ssb_bus *bus = ssb_gpio_get_bus(chip);  in ssb_gpio_to_irq()  local
35 if (bus->bustype == SSB_BUSTYPE_SSB) in ssb_gpio_to_irq()
36 return irq_find_mapping(bus->irq_domain, gpio); in ssb_gpio_to_irq()
48 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_chipco_get_value() local
50 return !!ssb_chipco_gpio_in(&bus->chipco, 1 << gpio); in ssb_gpio_chipco_get_value()
56 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_chipco_set_value() local
58 ssb_chipco_gpio_out(&bus->chipco, 1 << gpio, value ? 1 << gpio : 0); in ssb_gpio_chipco_set_value()
64 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_chipco_direction_input() local
66 ssb_chipco_gpio_outen(&bus->chipco, 1 << gpio, 0); in ssb_gpio_chipco_direction_input()
73 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_chipco_direction_output() local
75 ssb_chipco_gpio_outen(&bus->chipco, 1 << gpio, 1 << gpio); in ssb_gpio_chipco_direction_output()
76 ssb_chipco_gpio_out(&bus->chipco, 1 << gpio, value ? 1 << gpio : 0); in ssb_gpio_chipco_direction_output()
82 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_chipco_request() local
84 ssb_chipco_gpio_control(&bus->chipco, 1 << gpio, 0); in ssb_gpio_chipco_request()
86 ssb_chipco_gpio_pulldown(&bus->chipco, 1 << gpio, 0); in ssb_gpio_chipco_request()
88 ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 1 << gpio); in ssb_gpio_chipco_request()
95 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_chipco_free() local
98 ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0); in ssb_gpio_chipco_free()
104 struct ssb_bus *bus = irq_data_get_irq_chip_data(d); in ssb_gpio_irq_chipco_mask() local
107 ssb_chipco_gpio_intmask(&bus->chipco, BIT(gpio), 0); in ssb_gpio_irq_chipco_mask()
112 struct ssb_bus *bus = irq_data_get_irq_chip_data(d); in ssb_gpio_irq_chipco_unmask() local
114 u32 val = ssb_chipco_gpio_in(&bus->chipco, BIT(gpio)); in ssb_gpio_irq_chipco_unmask()
116 ssb_chipco_gpio_polarity(&bus->chipco, BIT(gpio), val); in ssb_gpio_irq_chipco_unmask()
117 ssb_chipco_gpio_intmask(&bus->chipco, BIT(gpio), BIT(gpio)); in ssb_gpio_irq_chipco_unmask()
128 struct ssb_bus *bus = dev_id; in ssb_gpio_irq_chipco_handler() local
129 struct ssb_chipcommon *chipco = &bus->chipco; in ssb_gpio_irq_chipco_handler()
139 for_each_set_bit(gpio, &irqs, bus->gpio.ngpio) in ssb_gpio_irq_chipco_handler()
140 generic_handle_irq(ssb_gpio_to_irq(&bus->gpio, gpio)); in ssb_gpio_irq_chipco_handler()
146 static int ssb_gpio_irq_chipco_domain_init(struct ssb_bus *bus) in ssb_gpio_irq_chipco_domain_init() argument
148 struct ssb_chipcommon *chipco = &bus->chipco; in ssb_gpio_irq_chipco_domain_init()
149 struct gpio_chip *chip = &bus->gpio; in ssb_gpio_irq_chipco_domain_init()
152 if (bus->bustype != SSB_BUSTYPE_SSB) in ssb_gpio_irq_chipco_domain_init()
155 bus->irq_domain = irq_domain_add_linear(NULL, chip->ngpio, in ssb_gpio_irq_chipco_domain_init()
157 if (!bus->irq_domain) { in ssb_gpio_irq_chipco_domain_init()
162 int irq = irq_create_mapping(bus->irq_domain, gpio); in ssb_gpio_irq_chipco_domain_init()
164 irq_set_chip_data(irq, bus); in ssb_gpio_irq_chipco_domain_init()
169 hwirq = ssb_mips_irq(bus->chipco.dev) + 2; in ssb_gpio_irq_chipco_domain_init()
171 "gpio", bus); in ssb_gpio_irq_chipco_domain_init()
175 ssb_chipco_gpio_intmask(&bus->chipco, ~0, 0); in ssb_gpio_irq_chipco_domain_init()
182 int irq = irq_find_mapping(bus->irq_domain, gpio); in ssb_gpio_irq_chipco_domain_init()
186 irq_domain_remove(bus->irq_domain); in ssb_gpio_irq_chipco_domain_init()
191 static void ssb_gpio_irq_chipco_domain_exit(struct ssb_bus *bus) in ssb_gpio_irq_chipco_domain_exit() argument
193 struct ssb_chipcommon *chipco = &bus->chipco; in ssb_gpio_irq_chipco_domain_exit()
194 struct gpio_chip *chip = &bus->gpio; in ssb_gpio_irq_chipco_domain_exit()
197 if (bus->bustype != SSB_BUSTYPE_SSB) in ssb_gpio_irq_chipco_domain_exit()
201 free_irq(ssb_mips_irq(bus->chipco.dev) + 2, chipco); in ssb_gpio_irq_chipco_domain_exit()
203 int irq = irq_find_mapping(bus->irq_domain, gpio); in ssb_gpio_irq_chipco_domain_exit()
207 irq_domain_remove(bus->irq_domain); in ssb_gpio_irq_chipco_domain_exit()
210 static int ssb_gpio_irq_chipco_domain_init(struct ssb_bus *bus) in ssb_gpio_irq_chipco_domain_init() argument
215 static void ssb_gpio_irq_chipco_domain_exit(struct ssb_bus *bus) in ssb_gpio_irq_chipco_domain_exit() argument
220 static int ssb_gpio_chipco_init(struct ssb_bus *bus) in ssb_gpio_chipco_init() argument
222 struct gpio_chip *chip = &bus->gpio; in ssb_gpio_chipco_init()
240 if (bus->bustype == SSB_BUSTYPE_SSB) in ssb_gpio_chipco_init()
245 err = ssb_gpio_irq_chipco_domain_init(bus); in ssb_gpio_chipco_init()
251 ssb_gpio_irq_chipco_domain_exit(bus); in ssb_gpio_chipco_init()
266 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_extif_get_value() local
268 return !!ssb_extif_gpio_in(&bus->extif, 1 << gpio); in ssb_gpio_extif_get_value()
274 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_extif_set_value() local
276 ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0); in ssb_gpio_extif_set_value()
282 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_extif_direction_input() local
284 ssb_extif_gpio_outen(&bus->extif, 1 << gpio, 0); in ssb_gpio_extif_direction_input()
291 struct ssb_bus *bus = ssb_gpio_get_bus(chip); in ssb_gpio_extif_direction_output() local
293 ssb_extif_gpio_outen(&bus->extif, 1 << gpio, 1 << gpio); in ssb_gpio_extif_direction_output()
294 ssb_extif_gpio_out(&bus->extif, 1 << gpio, value ? 1 << gpio : 0); in ssb_gpio_extif_direction_output()
301 struct ssb_bus *bus = irq_data_get_irq_chip_data(d); in ssb_gpio_irq_extif_mask() local
304 ssb_extif_gpio_intmask(&bus->extif, BIT(gpio), 0); in ssb_gpio_irq_extif_mask()
309 struct ssb_bus *bus = irq_data_get_irq_chip_data(d); in ssb_gpio_irq_extif_unmask() local
311 u32 val = ssb_extif_gpio_in(&bus->extif, BIT(gpio)); in ssb_gpio_irq_extif_unmask()
313 ssb_extif_gpio_polarity(&bus->extif, BIT(gpio), val); in ssb_gpio_irq_extif_unmask()
314 ssb_extif_gpio_intmask(&bus->extif, BIT(gpio), BIT(gpio)); in ssb_gpio_irq_extif_unmask()
325 struct ssb_bus *bus = dev_id; in ssb_gpio_irq_extif_handler() local
326 struct ssb_extif *extif = &bus->extif; in ssb_gpio_irq_extif_handler()
336 for_each_set_bit(gpio, &irqs, bus->gpio.ngpio) in ssb_gpio_irq_extif_handler()
337 generic_handle_irq(ssb_gpio_to_irq(&bus->gpio, gpio)); in ssb_gpio_irq_extif_handler()
343 static int ssb_gpio_irq_extif_domain_init(struct ssb_bus *bus) in ssb_gpio_irq_extif_domain_init() argument
345 struct ssb_extif *extif = &bus->extif; in ssb_gpio_irq_extif_domain_init()
346 struct gpio_chip *chip = &bus->gpio; in ssb_gpio_irq_extif_domain_init()
349 if (bus->bustype != SSB_BUSTYPE_SSB) in ssb_gpio_irq_extif_domain_init()
352 bus->irq_domain = irq_domain_add_linear(NULL, chip->ngpio, in ssb_gpio_irq_extif_domain_init()
354 if (!bus->irq_domain) { in ssb_gpio_irq_extif_domain_init()
359 int irq = irq_create_mapping(bus->irq_domain, gpio); in ssb_gpio_irq_extif_domain_init()
361 irq_set_chip_data(irq, bus); in ssb_gpio_irq_extif_domain_init()
366 hwirq = ssb_mips_irq(bus->extif.dev) + 2; in ssb_gpio_irq_extif_domain_init()
368 "gpio", bus); in ssb_gpio_irq_extif_domain_init()
372 ssb_extif_gpio_intmask(&bus->extif, ~0, 0); in ssb_gpio_irq_extif_domain_init()
378 int irq = irq_find_mapping(bus->irq_domain, gpio); in ssb_gpio_irq_extif_domain_init()
382 irq_domain_remove(bus->irq_domain); in ssb_gpio_irq_extif_domain_init()
387 static void ssb_gpio_irq_extif_domain_exit(struct ssb_bus *bus) in ssb_gpio_irq_extif_domain_exit() argument
389 struct ssb_extif *extif = &bus->extif; in ssb_gpio_irq_extif_domain_exit()
390 struct gpio_chip *chip = &bus->gpio; in ssb_gpio_irq_extif_domain_exit()
393 if (bus->bustype != SSB_BUSTYPE_SSB) in ssb_gpio_irq_extif_domain_exit()
396 free_irq(ssb_mips_irq(bus->extif.dev) + 2, extif); in ssb_gpio_irq_extif_domain_exit()
398 int irq = irq_find_mapping(bus->irq_domain, gpio); in ssb_gpio_irq_extif_domain_exit()
402 irq_domain_remove(bus->irq_domain); in ssb_gpio_irq_extif_domain_exit()
405 static int ssb_gpio_irq_extif_domain_init(struct ssb_bus *bus) in ssb_gpio_irq_extif_domain_init() argument
410 static void ssb_gpio_irq_extif_domain_exit(struct ssb_bus *bus) in ssb_gpio_irq_extif_domain_exit() argument
415 static int ssb_gpio_extif_init(struct ssb_bus *bus) in ssb_gpio_extif_init() argument
417 struct gpio_chip *chip = &bus->gpio; in ssb_gpio_extif_init()
433 if (bus->bustype == SSB_BUSTYPE_SSB) in ssb_gpio_extif_init()
438 err = ssb_gpio_irq_extif_domain_init(bus); in ssb_gpio_extif_init()
444 ssb_gpio_irq_extif_domain_exit(bus); in ssb_gpio_extif_init()
452 static int ssb_gpio_extif_init(struct ssb_bus *bus) in ssb_gpio_extif_init() argument
462 int ssb_gpio_init(struct ssb_bus *bus) in ssb_gpio_init() argument
464 if (ssb_chipco_available(&bus->chipco)) in ssb_gpio_init()
465 return ssb_gpio_chipco_init(bus); in ssb_gpio_init()
466 else if (ssb_extif_available(&bus->extif)) in ssb_gpio_init()
467 return ssb_gpio_extif_init(bus); in ssb_gpio_init()
474 int ssb_gpio_unregister(struct ssb_bus *bus) in ssb_gpio_unregister() argument
476 if (ssb_chipco_available(&bus->chipco) || in ssb_gpio_unregister()
477 ssb_extif_available(&bus->extif)) { in ssb_gpio_unregister()
478 gpiochip_remove(&bus->gpio); in ssb_gpio_unregister()