Lines Matching +full:10 +full:base +full:- +full:t1

1 // SPDX-License-Identifier: GPL-2.0+
46 u8 t1; member
77 …"gpio-a sampling freq in Hz (default is 1000Hz) valid values: 10, 100, 1000, 10000, 100000, 100000…
79 /* ----- begin of gipo a chip -------------------------------------------- */
86 struct vprbrd *vb = gpio->vb; in vprbrd_gpioa_get()
87 struct vprbrd_gpioa_msg *gamsg = (struct vprbrd_gpioa_msg *)vb->buf; in vprbrd_gpioa_get()
90 if (gpio->gpioa_out & (1 << offset)) in vprbrd_gpioa_get()
91 return !!(gpio->gpioa_val & (1 << offset)); in vprbrd_gpioa_get()
93 mutex_lock(&vb->lock); in vprbrd_gpioa_get()
95 gamsg->cmd = VPRBRD_GPIOA_CMD_GETIN; in vprbrd_gpioa_get()
96 gamsg->clk = 0x00; in vprbrd_gpioa_get()
97 gamsg->offset = offset; in vprbrd_gpioa_get()
98 gamsg->t1 = 0x00; in vprbrd_gpioa_get()
99 gamsg->t2 = 0x00; in vprbrd_gpioa_get()
100 gamsg->invert = 0x00; in vprbrd_gpioa_get()
101 gamsg->pwmlevel = 0x00; in vprbrd_gpioa_get()
102 gamsg->outval = 0x00; in vprbrd_gpioa_get()
103 gamsg->risefall = 0x00; in vprbrd_gpioa_get()
104 gamsg->answer = 0x00; in vprbrd_gpioa_get()
105 gamsg->__fill = 0x00; in vprbrd_gpioa_get()
107 ret = usb_control_msg(vb->usb_dev, usb_sndctrlpipe(vb->usb_dev, 0), in vprbrd_gpioa_get()
112 error = -EREMOTEIO; in vprbrd_gpioa_get()
114 ret = usb_control_msg(vb->usb_dev, usb_rcvctrlpipe(vb->usb_dev, 0), in vprbrd_gpioa_get()
118 answer = gamsg->answer & 0x01; in vprbrd_gpioa_get()
120 mutex_unlock(&vb->lock); in vprbrd_gpioa_get()
123 error = -EREMOTEIO; in vprbrd_gpioa_get()
136 struct vprbrd *vb = gpio->vb; in vprbrd_gpioa_set()
137 struct vprbrd_gpioa_msg *gamsg = (struct vprbrd_gpioa_msg *)vb->buf; in vprbrd_gpioa_set()
139 if (!(gpio->gpioa_out & (1 << offset))) in vprbrd_gpioa_set()
143 gpio->gpioa_val |= (1 << offset); in vprbrd_gpioa_set()
145 gpio->gpioa_val &= ~(1 << offset); in vprbrd_gpioa_set()
147 mutex_lock(&vb->lock); in vprbrd_gpioa_set()
149 gamsg->cmd = VPRBRD_GPIOA_CMD_SETOUT; in vprbrd_gpioa_set()
150 gamsg->clk = 0x00; in vprbrd_gpioa_set()
151 gamsg->offset = offset; in vprbrd_gpioa_set()
152 gamsg->t1 = 0x00; in vprbrd_gpioa_set()
153 gamsg->t2 = 0x00; in vprbrd_gpioa_set()
154 gamsg->invert = 0x00; in vprbrd_gpioa_set()
155 gamsg->pwmlevel = 0x00; in vprbrd_gpioa_set()
156 gamsg->outval = value; in vprbrd_gpioa_set()
157 gamsg->risefall = 0x00; in vprbrd_gpioa_set()
158 gamsg->answer = 0x00; in vprbrd_gpioa_set()
159 gamsg->__fill = 0x00; in vprbrd_gpioa_set()
161 ret = usb_control_msg(vb->usb_dev, usb_sndctrlpipe(vb->usb_dev, 0), in vprbrd_gpioa_set()
167 mutex_unlock(&vb->lock); in vprbrd_gpioa_set()
170 dev_err(chip->parent, "usb error setting pin value\n"); in vprbrd_gpioa_set()
171 return -EREMOTEIO; in vprbrd_gpioa_set()
182 struct vprbrd *vb = gpio->vb; in vprbrd_gpioa_direction_input()
183 struct vprbrd_gpioa_msg *gamsg = (struct vprbrd_gpioa_msg *)vb->buf; in vprbrd_gpioa_direction_input()
185 gpio->gpioa_out &= ~(1 << offset); in vprbrd_gpioa_direction_input()
187 mutex_lock(&vb->lock); in vprbrd_gpioa_direction_input()
189 gamsg->cmd = VPRBRD_GPIOA_CMD_SETIN; in vprbrd_gpioa_direction_input()
190 gamsg->clk = gpioa_clk; in vprbrd_gpioa_direction_input()
191 gamsg->offset = offset; in vprbrd_gpioa_direction_input()
192 gamsg->t1 = 0x00; in vprbrd_gpioa_direction_input()
193 gamsg->t2 = 0x00; in vprbrd_gpioa_direction_input()
194 gamsg->invert = 0x00; in vprbrd_gpioa_direction_input()
195 gamsg->pwmlevel = 0x00; in vprbrd_gpioa_direction_input()
196 gamsg->outval = 0x00; in vprbrd_gpioa_direction_input()
197 gamsg->risefall = 0x00; in vprbrd_gpioa_direction_input()
198 gamsg->answer = 0x00; in vprbrd_gpioa_direction_input()
199 gamsg->__fill = 0x00; in vprbrd_gpioa_direction_input()
201 ret = usb_control_msg(vb->usb_dev, usb_sndctrlpipe(vb->usb_dev, 0), in vprbrd_gpioa_direction_input()
206 mutex_unlock(&vb->lock); in vprbrd_gpioa_direction_input()
209 return -EREMOTEIO; in vprbrd_gpioa_direction_input()
219 struct vprbrd *vb = gpio->vb; in vprbrd_gpioa_direction_output()
220 struct vprbrd_gpioa_msg *gamsg = (struct vprbrd_gpioa_msg *)vb->buf; in vprbrd_gpioa_direction_output()
222 gpio->gpioa_out |= (1 << offset); in vprbrd_gpioa_direction_output()
224 gpio->gpioa_val |= (1 << offset); in vprbrd_gpioa_direction_output()
226 gpio->gpioa_val &= ~(1 << offset); in vprbrd_gpioa_direction_output()
228 mutex_lock(&vb->lock); in vprbrd_gpioa_direction_output()
230 gamsg->cmd = VPRBRD_GPIOA_CMD_SETOUT; in vprbrd_gpioa_direction_output()
231 gamsg->clk = 0x00; in vprbrd_gpioa_direction_output()
232 gamsg->offset = offset; in vprbrd_gpioa_direction_output()
233 gamsg->t1 = 0x00; in vprbrd_gpioa_direction_output()
234 gamsg->t2 = 0x00; in vprbrd_gpioa_direction_output()
235 gamsg->invert = 0x00; in vprbrd_gpioa_direction_output()
236 gamsg->pwmlevel = 0x00; in vprbrd_gpioa_direction_output()
237 gamsg->outval = value; in vprbrd_gpioa_direction_output()
238 gamsg->risefall = 0x00; in vprbrd_gpioa_direction_output()
239 gamsg->answer = 0x00; in vprbrd_gpioa_direction_output()
240 gamsg->__fill = 0x00; in vprbrd_gpioa_direction_output()
242 ret = usb_control_msg(vb->usb_dev, usb_sndctrlpipe(vb->usb_dev, 0), in vprbrd_gpioa_direction_output()
247 mutex_unlock(&vb->lock); in vprbrd_gpioa_direction_output()
250 return -EREMOTEIO; in vprbrd_gpioa_direction_output()
255 /* ----- end of gpio a chip ---------------------------------------------- */
257 /* ----- begin of gipo b chip -------------------------------------------- */
262 struct vprbrd_gpiob_msg *gbmsg = (struct vprbrd_gpiob_msg *)vb->buf; in vprbrd_gpiob_setdir()
265 gbmsg->cmd = VPRBRD_GPIOB_CMD_SETDIR; in vprbrd_gpiob_setdir()
266 gbmsg->val = cpu_to_be16(dir << offset); in vprbrd_gpiob_setdir()
267 gbmsg->mask = cpu_to_be16(0x0001 << offset); in vprbrd_gpiob_setdir()
269 ret = usb_control_msg(vb->usb_dev, usb_sndctrlpipe(vb->usb_dev, 0), in vprbrd_gpiob_setdir()
275 return -EREMOTEIO; in vprbrd_gpiob_setdir()
286 struct vprbrd *vb = gpio->vb; in vprbrd_gpiob_get()
287 struct vprbrd_gpiob_msg *gbmsg = (struct vprbrd_gpiob_msg *)vb->buf; in vprbrd_gpiob_get()
290 if (gpio->gpiob_out & (1 << offset)) in vprbrd_gpiob_get()
291 return gpio->gpiob_val & (1 << offset); in vprbrd_gpiob_get()
293 mutex_lock(&vb->lock); in vprbrd_gpiob_get()
295 ret = usb_control_msg(vb->usb_dev, usb_rcvctrlpipe(vb->usb_dev, 0), in vprbrd_gpiob_get()
299 val = gbmsg->val; in vprbrd_gpiob_get()
301 mutex_unlock(&vb->lock); in vprbrd_gpiob_get()
307 gpio->gpiob_val = be16_to_cpu(val); in vprbrd_gpiob_get()
309 return (gpio->gpiob_val >> offset) & 0x1; in vprbrd_gpiob_get()
317 struct vprbrd *vb = gpio->vb; in vprbrd_gpiob_set()
318 struct vprbrd_gpiob_msg *gbmsg = (struct vprbrd_gpiob_msg *)vb->buf; in vprbrd_gpiob_set()
320 if (!(gpio->gpiob_out & (1 << offset))) in vprbrd_gpiob_set()
324 gpio->gpiob_val |= (1 << offset); in vprbrd_gpiob_set()
326 gpio->gpiob_val &= ~(1 << offset); in vprbrd_gpiob_set()
328 mutex_lock(&vb->lock); in vprbrd_gpiob_set()
330 gbmsg->cmd = VPRBRD_GPIOB_CMD_SETVAL; in vprbrd_gpiob_set()
331 gbmsg->val = cpu_to_be16(value << offset); in vprbrd_gpiob_set()
332 gbmsg->mask = cpu_to_be16(0x0001 << offset); in vprbrd_gpiob_set()
334 ret = usb_control_msg(vb->usb_dev, usb_sndctrlpipe(vb->usb_dev, 0), in vprbrd_gpiob_set()
340 mutex_unlock(&vb->lock); in vprbrd_gpiob_set()
343 dev_err(chip->parent, "usb error setting pin value\n"); in vprbrd_gpiob_set()
344 return -EREMOTEIO; in vprbrd_gpiob_set()
355 struct vprbrd *vb = gpio->vb; in vprbrd_gpiob_direction_input()
357 gpio->gpiob_out &= ~(1 << offset); in vprbrd_gpiob_direction_input()
359 mutex_lock(&vb->lock); in vprbrd_gpiob_direction_input()
363 mutex_unlock(&vb->lock); in vprbrd_gpiob_direction_input()
366 dev_err(chip->parent, "usb error setting pin to input\n"); in vprbrd_gpiob_direction_input()
376 struct vprbrd *vb = gpio->vb; in vprbrd_gpiob_direction_output()
378 gpio->gpiob_out |= (1 << offset); in vprbrd_gpiob_direction_output()
380 mutex_lock(&vb->lock); in vprbrd_gpiob_direction_output()
382 mutex_unlock(&vb->lock); in vprbrd_gpiob_direction_output()
384 dev_err(chip->parent, "usb error setting pin to output\n"); in vprbrd_gpiob_direction_output()
391 /* ----- end of gpio b chip ---------------------------------------------- */
395 struct vprbrd *vb = dev_get_drvdata(pdev->dev.parent); in vprbrd_gpio_probe()
399 vb_gpio = devm_kzalloc(&pdev->dev, sizeof(*vb_gpio), GFP_KERNEL); in vprbrd_gpio_probe()
401 return -ENOMEM; in vprbrd_gpio_probe()
403 vb_gpio->vb = vb; in vprbrd_gpio_probe()
405 vb_gpio->gpioa.label = "viperboard gpio a"; in vprbrd_gpio_probe()
406 vb_gpio->gpioa.parent = &pdev->dev; in vprbrd_gpio_probe()
407 vb_gpio->gpioa.owner = THIS_MODULE; in vprbrd_gpio_probe()
408 vb_gpio->gpioa.base = -1; in vprbrd_gpio_probe()
409 vb_gpio->gpioa.ngpio = 16; in vprbrd_gpio_probe()
410 vb_gpio->gpioa.can_sleep = true; in vprbrd_gpio_probe()
411 vb_gpio->gpioa.set = vprbrd_gpioa_set; in vprbrd_gpio_probe()
412 vb_gpio->gpioa.get = vprbrd_gpioa_get; in vprbrd_gpio_probe()
413 vb_gpio->gpioa.direction_input = vprbrd_gpioa_direction_input; in vprbrd_gpio_probe()
414 vb_gpio->gpioa.direction_output = vprbrd_gpioa_direction_output; in vprbrd_gpio_probe()
416 ret = devm_gpiochip_add_data(&pdev->dev, &vb_gpio->gpioa, vb_gpio); in vprbrd_gpio_probe()
421 vb_gpio->gpiob.label = "viperboard gpio b"; in vprbrd_gpio_probe()
422 vb_gpio->gpiob.parent = &pdev->dev; in vprbrd_gpio_probe()
423 vb_gpio->gpiob.owner = THIS_MODULE; in vprbrd_gpio_probe()
424 vb_gpio->gpiob.base = -1; in vprbrd_gpio_probe()
425 vb_gpio->gpiob.ngpio = 16; in vprbrd_gpio_probe()
426 vb_gpio->gpiob.can_sleep = true; in vprbrd_gpio_probe()
427 vb_gpio->gpiob.set = vprbrd_gpiob_set; in vprbrd_gpio_probe()
428 vb_gpio->gpiob.get = vprbrd_gpiob_get; in vprbrd_gpio_probe()
429 vb_gpio->gpiob.direction_input = vprbrd_gpiob_direction_input; in vprbrd_gpio_probe()
430 vb_gpio->gpiob.direction_output = vprbrd_gpiob_direction_output; in vprbrd_gpio_probe()
432 return devm_gpiochip_add_data(&pdev->dev, &vb_gpio->gpiob, vb_gpio); in vprbrd_gpio_probe()
436 .driver.name = "viperboard-gpio",
458 case 10: in vprbrd_gpio_init()
479 MODULE_ALIAS("platform:viperboard-gpio");