Lines Matching full:block

39 struct sch311x_gpio_block {		/* one GPIO block runtime data */
44 spinlock_t lock; /* lock for this GPIO block */
134 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_request() local
136 if (block->config_regs[offset] == 0) /* GPIO is not available */ in sch311x_gpio_request()
139 if (!request_region(block->runtime_reg + block->config_regs[offset], in sch311x_gpio_request()
142 block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_request()
150 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_free() local
152 if (block->config_regs[offset] == 0) /* GPIO is not available */ in sch311x_gpio_free()
155 release_region(block->runtime_reg + block->config_regs[offset], 1); in sch311x_gpio_free()
160 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_get() local
163 spin_lock(&block->lock); in sch311x_gpio_get()
164 data = inb(block->runtime_reg + block->data_reg); in sch311x_gpio_get()
165 spin_unlock(&block->lock); in sch311x_gpio_get()
170 static void __sch311x_gpio_set(struct sch311x_gpio_block *block, in __sch311x_gpio_set() argument
173 u8 data = inb(block->runtime_reg + block->data_reg); in __sch311x_gpio_set()
178 outb(data, block->runtime_reg + block->data_reg); in __sch311x_gpio_set()
184 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_set() local
186 spin_lock(&block->lock); in sch311x_gpio_set()
187 __sch311x_gpio_set(block, offset, value); in sch311x_gpio_set()
188 spin_unlock(&block->lock); in sch311x_gpio_set()
193 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_direction_in() local
196 spin_lock(&block->lock); in sch311x_gpio_direction_in()
197 data = inb(block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_direction_in()
199 outb(data, block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_direction_in()
200 spin_unlock(&block->lock); in sch311x_gpio_direction_in()
208 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_direction_out() local
211 spin_lock(&block->lock); in sch311x_gpio_direction_out()
213 data = inb(block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_direction_out()
215 outb(data, block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_direction_out()
216 __sch311x_gpio_set(block, offset, value); in sch311x_gpio_direction_out()
218 spin_unlock(&block->lock); in sch311x_gpio_direction_out()
224 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_get_direction() local
227 spin_lock(&block->lock); in sch311x_gpio_get_direction()
228 data = inb(block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_get_direction()
229 spin_unlock(&block->lock); in sch311x_gpio_get_direction()
237 struct sch311x_gpio_block *block = gpiochip_get_data(chip); in sch311x_gpio_set_config() local
243 spin_lock(&block->lock); in sch311x_gpio_set_config()
244 data = inb(block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_set_config()
246 outb(data, block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_set_config()
247 spin_unlock(&block->lock); in sch311x_gpio_set_config()
250 spin_lock(&block->lock); in sch311x_gpio_set_config()
251 data = inb(block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_set_config()
253 outb(data, block->runtime_reg + block->config_regs[offset]); in sch311x_gpio_set_config()
254 spin_unlock(&block->lock); in sch311x_gpio_set_config()
266 struct sch311x_gpio_block *block; in sch311x_gpio_probe() local
284 block = &priv->blocks[i]; in sch311x_gpio_probe()
286 spin_lock_init(&block->lock); in sch311x_gpio_probe()
288 block->chip.label = DRV_NAME; in sch311x_gpio_probe()
289 block->chip.owner = THIS_MODULE; in sch311x_gpio_probe()
290 block->chip.request = sch311x_gpio_request; in sch311x_gpio_probe()
291 block->chip.free = sch311x_gpio_free; in sch311x_gpio_probe()
292 block->chip.direction_input = sch311x_gpio_direction_in; in sch311x_gpio_probe()
293 block->chip.direction_output = sch311x_gpio_direction_out; in sch311x_gpio_probe()
294 block->chip.get_direction = sch311x_gpio_get_direction; in sch311x_gpio_probe()
295 block->chip.set_config = sch311x_gpio_set_config; in sch311x_gpio_probe()
296 block->chip.get = sch311x_gpio_get; in sch311x_gpio_probe()
297 block->chip.set = sch311x_gpio_set; in sch311x_gpio_probe()
298 block->chip.ngpio = 8; in sch311x_gpio_probe()
299 block->chip.parent = &pdev->dev; in sch311x_gpio_probe()
300 block->chip.base = sch311x_gpio_blocks[i].base; in sch311x_gpio_probe()
301 block->config_regs = sch311x_gpio_blocks[i].config_regs; in sch311x_gpio_probe()
302 block->data_reg = sch311x_gpio_blocks[i].data_reg; in sch311x_gpio_probe()
303 block->runtime_reg = pdata->runtime_reg; in sch311x_gpio_probe()
305 err = gpiochip_add_data(&block->chip, block); in sch311x_gpio_probe()
312 "SMSC SCH311x GPIO block %d registered.\n", i); in sch311x_gpio_probe()
332 "SMSC SCH311x GPIO block %d unregistered.\n", i); in sch311x_gpio_remove()