Lines Matching +full:dev +full:- +full:a +full:- +full:active +full:- +full:pins
1 // SPDX-License-Identifier: GPL-2.0+
65 /* not an actual device number, just a value meaning 'no device' */
68 /* registers with offsets >= 0x30 are specific for a particular device */
127 * for a description what a particular field of this struct means please see
128 * a description of the relevant module parameter at the bottom of this file
145 return -EBUSY; in winbond_sio_enter()
157 static void winbond_sio_select_logical(unsigned long base, u8 dev) in winbond_sio_select_logical() argument
160 outb(dev, base + 1); in winbond_sio_select_logical()
206 * struct winbond_gpio_port_conflict - possibly conflicting device information
208 * @dev: Super I/O logical device number where the testreg register
209 * is located (or WB_SIO_DEV_NONE - don't select any
212 * @testbit: index of a bit to check whether an actual conflict exists
213 * @warnonly: if set then a conflict isn't fatal (just warn about it),
214 * otherwise disable the particular GPIO port if a conflict
219 u8 dev; member
226 * struct winbond_gpio_info - information about a particular GPIO port (device)
227 * @dev: Super I/O logical device number of the registers
230 * @enablebit: index of a port enable bit
232 * @outputppbit: index of a push-pull output driver mode bit
236 * @conflict: description of a device that possibly conflicts with
240 u8 dev; member
253 .dev = WB_SIO_DEV_GPIO12,
263 .dev = WB_SIO_DEV_UARTB,
270 .dev = WB_SIO_DEV_GPIO12,
281 .dev = WB_SIO_DEV_GPIO34,
291 .dev = WB_SIO_DEV_UARTC,
298 .dev = WB_SIO_DEV_GPIO34,
308 .dev = WB_SIO_DEV_UARTD,
315 .dev = WB_SIO_DEV_WDGPIO56,
325 .dev = WB_SIO_DEV_UARTE,
332 .dev = WB_SIO_DEV_WDGPIO56,
342 .dev = WB_SIO_DEV_NONE,
350 /* returns whether changing a pin is allowed */
361 *gpio_num -= 8; in winbond_gpio_get_info()
367 * GPIO2 (the second port) shares some pins with a basic PC in winbond_gpio_get_info()
369 * Don't allow changing these pins by default. in winbond_gpio_get_info()
396 winbond_sio_select_logical(*base, info->dev); in winbond_gpio_get()
398 val = winbond_sio_reg_btest(*base, info->datareg, offset); in winbond_gpio_get()
399 if (winbond_sio_reg_btest(*base, info->invreg, offset)) in winbond_gpio_get()
414 return -EACCES; in winbond_gpio_direction_in()
420 winbond_sio_select_logical(*base, info->dev); in winbond_gpio_direction_in()
422 winbond_sio_reg_bset(*base, info->ioreg, offset); in winbond_gpio_direction_in()
438 return -EACCES; in winbond_gpio_direction_out()
444 winbond_sio_select_logical(*base, info->dev); in winbond_gpio_direction_out()
446 winbond_sio_reg_bclear(*base, info->ioreg, offset); in winbond_gpio_direction_out()
448 if (winbond_sio_reg_btest(*base, info->invreg, offset)) in winbond_gpio_direction_out()
452 winbond_sio_reg_bset(*base, info->datareg, offset); in winbond_gpio_direction_out()
454 winbond_sio_reg_bclear(*base, info->datareg, offset); in winbond_gpio_direction_out()
473 winbond_sio_select_logical(*base, info->dev); in winbond_gpio_set()
475 if (winbond_sio_reg_btest(*base, info->invreg, offset)) in winbond_gpio_set()
479 winbond_sio_reg_bset(*base, info->datareg, offset); in winbond_gpio_set()
481 winbond_sio_reg_bclear(*base, info->datareg, offset); in winbond_gpio_set()
487 .base = -1,
505 pr_warn("GPIO1 pins were connected to something else (%.2x), fixing\n", in winbond_gpio_configure_port0_pins()
525 const struct winbond_gpio_port_conflict *conflict = &info->conflict; in winbond_gpio_configure_port()
527 /* is there a possible conflicting device defined? */ in winbond_gpio_configure_port()
528 if (conflict->name != NULL) { in winbond_gpio_configure_port()
529 if (conflict->dev != WB_SIO_DEV_NONE) in winbond_gpio_configure_port()
530 winbond_sio_select_logical(base, conflict->dev); in winbond_gpio_configure_port()
532 if (winbond_sio_reg_btest(base, conflict->testreg, in winbond_gpio_configure_port()
533 conflict->testbit)) { in winbond_gpio_configure_port()
534 if (conflict->warnonly) in winbond_gpio_configure_port()
535 pr_warn("enabled GPIO%u share pins with active %s\n", in winbond_gpio_configure_port()
536 idx + 1, conflict->name); in winbond_gpio_configure_port()
539 idx + 1, conflict->name); in winbond_gpio_configure_port()
551 winbond_sio_select_logical(base, info->dev); in winbond_gpio_configure_port()
553 winbond_sio_reg_bset(base, info->enablereg, info->enablebit); in winbond_gpio_configure_port()
556 winbond_sio_reg_bset(base, info->outputreg, in winbond_gpio_configure_port()
557 info->outputppbit); in winbond_gpio_configure_port()
559 winbond_sio_reg_bclear(base, info->outputreg, in winbond_gpio_configure_port()
560 info->outputppbit); in winbond_gpio_configure_port()
562 pr_notice("GPIO%u pins are %s\n", idx + 1, in winbond_gpio_configure_port()
563 winbond_sio_reg_btest(base, info->outputreg, in winbond_gpio_configure_port()
564 info->outputppbit) ? in winbond_gpio_configure_port()
565 "push-pull" : in winbond_gpio_configure_port()
580 pr_err("please use 'gpios' module parameter to select some active GPIO ports to enable\n"); in winbond_gpio_configure()
581 return -EINVAL; in winbond_gpio_configure()
604 ret = -ENODEV; in winbond_gpio_check_chip()
612 static int winbond_gpio_imatch(struct device *dev, unsigned int id) in winbond_gpio_imatch() argument
617 gpios_rem = params.gpios & ~GENMASK(ARRAY_SIZE(winbond_gpio_infos) - 1, in winbond_gpio_imatch()
626 pr_err("some GPIO ports are set both to push-pull and open drain mode at the same time\n"); in winbond_gpio_imatch()
641 if (ret != -ENODEV && ret != -EBUSY) in winbond_gpio_imatch()
648 static int winbond_gpio_iprobe(struct device *dev, unsigned int id) in winbond_gpio_iprobe() argument
653 return -EINVAL; in winbond_gpio_iprobe()
669 * winbond_gpio_configure() & co. due to, for example, a pin conflict). in winbond_gpio_iprobe()
674 * GPIO6 port has only 5 pins, so if it is enabled we have to adjust in winbond_gpio_iprobe()
678 winbond_gpio_chip.ngpio -= (8 - 5); in winbond_gpio_iprobe()
680 winbond_gpio_chip.parent = dev; in winbond_gpio_iprobe()
682 return devm_gpiochip_add_data(dev, &winbond_gpio_chip, ¶ms.base); in winbond_gpio_iprobe()
697 "I/O port base (when unset - probe chip default ones)");
702 "bitmask of GPIO ports to enable (bit 0 - GPIO1, bit 1 - GPIO2, etc.");
706 * It can't be a one bitmask since we need three values per port: push-pull,
707 * open-drain and keep as-is (this is the default).
711 "bitmask of GPIO ports to set to push-pull mode (bit 0 - GPIO1, bit 1 - GPIO2, etc.");
715 "bitmask of GPIO ports to set to open drain mode (bit 0 - GPIO1, bit 1 - GPIO2, etc.");
718 * GPIO2.0 and GPIO2.1 control a basic PC functionality that we
720 * firmware owns these pins).