Lines Matching +full:port +full:- +full:config

1 // SPDX-License-Identifier: GPL-2.0-only
10 Copyright (c) 2001,2002 Christer Weinigel <wingel@nano-system.com>,
29 MODULE_DESCRIPTION("NatSemi/Winbond PC-8736x GPIO Pin Driver");
40 #define SIO_BASE1 0x2E /* 1st command-reg to check */
41 #define SIO_BASE2 0x4E /* alt command-reg to check */
47 #define SIO_CF1 0x21 /* chip config, bit0 is chip enable */
58 /* config-space addrs to read/write each unit's runtime addr */
62 /* GPIO config-space pin-control addresses */
70 /* GPIO port runtime access, functionality */
71 static int port_offset[] = { 0, 4, 8, 10 }; /* non-uniform offsets ! */
119 /* select GPIO port/pin from device minor number */ in select_pin()
128 u32 config, new_config; in pc8736x_gpio_configure_fn() local
135 /* read current config value */ in pc8736x_gpio_configure_fn()
136 config = superio_inb(func_slct); in pc8736x_gpio_configure_fn()
138 /* set new config */ in pc8736x_gpio_configure_fn()
139 new_config = (config & mask) | bits; in pc8736x_gpio_configure_fn()
144 return config; in pc8736x_gpio_configure_fn()
155 int port, bit, val; in pc8736x_gpio_get() local
157 port = minor >> 3; in pc8736x_gpio_get()
159 val = inb_p(pc8736x_gpio_base + port_offset[port] + PORT_IN); in pc8736x_gpio_get()
163 dev_dbg(&pdev->dev, "_gpio_get(%d from %x bit %d) == val %d\n", in pc8736x_gpio_get()
164 minor, pc8736x_gpio_base + port_offset[port] + PORT_IN, bit, in pc8736x_gpio_get()
172 int port, bit, curval; in pc8736x_gpio_set() local
175 port = minor >> 3; in pc8736x_gpio_set()
177 curval = inb_p(pc8736x_gpio_base + port_offset[port] + PORT_OUT); in pc8736x_gpio_set()
179 dev_dbg(&pdev->dev, "addr:%x cur:%x bit-pos:%d cur-bit:%x + new:%d -> bit-new:%d\n", in pc8736x_gpio_set()
180 pc8736x_gpio_base + port_offset[port] + PORT_OUT, in pc8736x_gpio_set()
185 dev_dbg(&pdev->dev, "gpio_set(minor:%d port:%d bit:%d)" in pc8736x_gpio_set()
186 " %2x -> %2x\n", minor, port, bit, curval, val); in pc8736x_gpio_set()
188 outb_p(val, pc8736x_gpio_base + port_offset[port] + PORT_OUT); in pc8736x_gpio_set()
190 curval = inb_p(pc8736x_gpio_base + port_offset[port] + PORT_OUT); in pc8736x_gpio_set()
191 val = inb_p(pc8736x_gpio_base + port_offset[port] + PORT_IN); in pc8736x_gpio_set()
193 dev_dbg(&pdev->dev, "wrote %x, read: %x\n", curval, val); in pc8736x_gpio_set()
194 pc8736x_gpio_shadow[port] = val; in pc8736x_gpio_set()
199 int port, bit; in pc8736x_gpio_current() local
201 port = minor >> 3; in pc8736x_gpio_current()
203 return ((pc8736x_gpio_shadow[port] >> bit) & 0x01); in pc8736x_gpio_current()
224 file->private_data = &pc8736x_gpio_ops; in pc8736x_gpio_open()
226 dev_dbg(&pdev->dev, "open %d\n", m); in pc8736x_gpio_open()
229 return -EINVAL; in pc8736x_gpio_open()
242 int port; in pc8736x_init_shadow() local
245 for (port = 0; port < 4; ++port) in pc8736x_init_shadow()
246 pc8736x_gpio_shadow[port] in pc8736x_init_shadow()
247 = inb_p(pc8736x_gpio_base + port_offset[port] in pc8736x_init_shadow()
261 return -ENOMEM; in pc8736x_gpio_init()
265 rc = -ENODEV; in pc8736x_gpio_init()
268 dev_info(&pdev->dev, "NatSemi pc8736x GPIO Driver Initializing\n"); in pc8736x_gpio_init()
271 rc = -ENODEV; in pc8736x_gpio_init()
272 dev_err(&pdev->dev, "no device found\n"); in pc8736x_gpio_init()
275 pc8736x_gpio_ops.dev = &pdev->dev; in pc8736x_gpio_init()
282 rc = -ENODEV; in pc8736x_gpio_init()
283 dev_err(&pdev->dev, "device not enabled\n"); in pc8736x_gpio_init()
288 rc = -ENODEV; in pc8736x_gpio_init()
289 dev_err(&pdev->dev, "GPIO unit not enabled\n"); in pc8736x_gpio_init()
298 rc = -ENODEV; in pc8736x_gpio_init()
299 dev_err(&pdev->dev, "GPIO ioport %x busy\n", in pc8736x_gpio_init()
303 dev_info(&pdev->dev, "GPIO ioport %x reserved\n", pc8736x_gpio_base); in pc8736x_gpio_init()
314 dev_err(&pdev->dev, "register-chrdev failed: %d\n", rc); in pc8736x_gpio_init()
319 dev_dbg(&pdev->dev, "got dynamic major %d\n", major); in pc8736x_gpio_init()
342 dev_dbg(&pdev->dev, "cleanup\n"); in pc8736x_gpio_cleanup()