gpio-viperboard.c (a02001086bbfb4da35d1228bebc2f1b442db455f) | gpio-viperboard.c (58383c78425e4ee1c077253cf297b641c861c02e) |
---|---|
1/* 2 * Nano River Technologies viperboard GPIO lib driver 3 * 4 * (C) 2012 by Lemonage GmbH 5 * Author: Lars Poeschel <poeschel@lemonage.de> 6 * All rights reserved. 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 159 unchanged lines hidden (view full) --- 168 usb_sndctrlpipe(vb->usb_dev, 0), 169 VPRBRD_USB_REQUEST_GPIOA, VPRBRD_USB_TYPE_OUT, 170 0x0000, 0x0000, gamsg, 171 sizeof(struct vprbrd_gpioa_msg), VPRBRD_USB_TIMEOUT_MS); 172 173 mutex_unlock(&vb->lock); 174 175 if (ret != sizeof(struct vprbrd_gpioa_msg)) | 1/* 2 * Nano River Technologies viperboard GPIO lib driver 3 * 4 * (C) 2012 by Lemonage GmbH 5 * Author: Lars Poeschel <poeschel@lemonage.de> 6 * All rights reserved. 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 159 unchanged lines hidden (view full) --- 168 usb_sndctrlpipe(vb->usb_dev, 0), 169 VPRBRD_USB_REQUEST_GPIOA, VPRBRD_USB_TYPE_OUT, 170 0x0000, 0x0000, gamsg, 171 sizeof(struct vprbrd_gpioa_msg), VPRBRD_USB_TIMEOUT_MS); 172 173 mutex_unlock(&vb->lock); 174 175 if (ret != sizeof(struct vprbrd_gpioa_msg)) |
176 dev_err(chip->dev, "usb error setting pin value\n"); | 176 dev_err(chip->parent, "usb error setting pin value\n"); |
177 } 178} 179 180static int vprbrd_gpioa_direction_input(struct gpio_chip *chip, 181 unsigned offset) 182{ 183 int ret; 184 struct vprbrd_gpio *gpio = --- 155 unchanged lines hidden (view full) --- 340 usb_sndctrlpipe(vb->usb_dev, 0), 341 VPRBRD_USB_REQUEST_GPIOB, VPRBRD_USB_TYPE_OUT, 342 0x0000, 0x0000, gbmsg, 343 sizeof(struct vprbrd_gpiob_msg), VPRBRD_USB_TIMEOUT_MS); 344 345 mutex_unlock(&vb->lock); 346 347 if (ret != sizeof(struct vprbrd_gpiob_msg)) | 177 } 178} 179 180static int vprbrd_gpioa_direction_input(struct gpio_chip *chip, 181 unsigned offset) 182{ 183 int ret; 184 struct vprbrd_gpio *gpio = --- 155 unchanged lines hidden (view full) --- 340 usb_sndctrlpipe(vb->usb_dev, 0), 341 VPRBRD_USB_REQUEST_GPIOB, VPRBRD_USB_TYPE_OUT, 342 0x0000, 0x0000, gbmsg, 343 sizeof(struct vprbrd_gpiob_msg), VPRBRD_USB_TIMEOUT_MS); 344 345 mutex_unlock(&vb->lock); 346 347 if (ret != sizeof(struct vprbrd_gpiob_msg)) |
348 dev_err(chip->dev, "usb error setting pin value\n"); | 348 dev_err(chip->parent, "usb error setting pin value\n"); |
349 } 350} 351 352static int vprbrd_gpiob_direction_input(struct gpio_chip *chip, 353 unsigned offset) 354{ 355 int ret; 356 struct vprbrd_gpio *gpio = --- 4 unchanged lines hidden (view full) --- 361 362 mutex_lock(&vb->lock); 363 364 ret = vprbrd_gpiob_setdir(vb, offset, 0); 365 366 mutex_unlock(&vb->lock); 367 368 if (ret) | 349 } 350} 351 352static int vprbrd_gpiob_direction_input(struct gpio_chip *chip, 353 unsigned offset) 354{ 355 int ret; 356 struct vprbrd_gpio *gpio = --- 4 unchanged lines hidden (view full) --- 361 362 mutex_lock(&vb->lock); 363 364 ret = vprbrd_gpiob_setdir(vb, offset, 0); 365 366 mutex_unlock(&vb->lock); 367 368 if (ret) |
369 dev_err(chip->dev, "usb error setting pin to input\n"); | 369 dev_err(chip->parent, "usb error setting pin to input\n"); |
370 371 return ret; 372} 373 374static int vprbrd_gpiob_direction_output(struct gpio_chip *chip, 375 unsigned offset, int value) 376{ 377 int ret; 378 struct vprbrd_gpio *gpio = 379 container_of(chip, struct vprbrd_gpio, gpiob); 380 struct vprbrd *vb = gpio->vb; 381 382 gpio->gpiob_out |= (1 << offset); 383 384 mutex_lock(&vb->lock); 385 386 ret = vprbrd_gpiob_setdir(vb, offset, 1); 387 if (ret) | 370 371 return ret; 372} 373 374static int vprbrd_gpiob_direction_output(struct gpio_chip *chip, 375 unsigned offset, int value) 376{ 377 int ret; 378 struct vprbrd_gpio *gpio = 379 container_of(chip, struct vprbrd_gpio, gpiob); 380 struct vprbrd *vb = gpio->vb; 381 382 gpio->gpiob_out |= (1 << offset); 383 384 mutex_lock(&vb->lock); 385 386 ret = vprbrd_gpiob_setdir(vb, offset, 1); 387 if (ret) |
388 dev_err(chip->dev, "usb error setting pin to output\n"); | 388 dev_err(chip->parent, "usb error setting pin to output\n"); |
389 390 mutex_unlock(&vb->lock); 391 392 vprbrd_gpiob_set(chip, offset, value); 393 394 return ret; 395} 396 --- 7 unchanged lines hidden (view full) --- 404 405 vb_gpio = devm_kzalloc(&pdev->dev, sizeof(*vb_gpio), GFP_KERNEL); 406 if (vb_gpio == NULL) 407 return -ENOMEM; 408 409 vb_gpio->vb = vb; 410 /* registering gpio a */ 411 vb_gpio->gpioa.label = "viperboard gpio a"; | 389 390 mutex_unlock(&vb->lock); 391 392 vprbrd_gpiob_set(chip, offset, value); 393 394 return ret; 395} 396 --- 7 unchanged lines hidden (view full) --- 404 405 vb_gpio = devm_kzalloc(&pdev->dev, sizeof(*vb_gpio), GFP_KERNEL); 406 if (vb_gpio == NULL) 407 return -ENOMEM; 408 409 vb_gpio->vb = vb; 410 /* registering gpio a */ 411 vb_gpio->gpioa.label = "viperboard gpio a"; |
412 vb_gpio->gpioa.dev = &pdev->dev; | 412 vb_gpio->gpioa.parent = &pdev->dev; |
413 vb_gpio->gpioa.owner = THIS_MODULE; 414 vb_gpio->gpioa.base = -1; 415 vb_gpio->gpioa.ngpio = 16; 416 vb_gpio->gpioa.can_sleep = true; 417 vb_gpio->gpioa.set = vprbrd_gpioa_set; 418 vb_gpio->gpioa.get = vprbrd_gpioa_get; 419 vb_gpio->gpioa.direction_input = vprbrd_gpioa_direction_input; 420 vb_gpio->gpioa.direction_output = vprbrd_gpioa_direction_output; 421 ret = gpiochip_add(&vb_gpio->gpioa); 422 if (ret < 0) { | 413 vb_gpio->gpioa.owner = THIS_MODULE; 414 vb_gpio->gpioa.base = -1; 415 vb_gpio->gpioa.ngpio = 16; 416 vb_gpio->gpioa.can_sleep = true; 417 vb_gpio->gpioa.set = vprbrd_gpioa_set; 418 vb_gpio->gpioa.get = vprbrd_gpioa_get; 419 vb_gpio->gpioa.direction_input = vprbrd_gpioa_direction_input; 420 vb_gpio->gpioa.direction_output = vprbrd_gpioa_direction_output; 421 ret = gpiochip_add(&vb_gpio->gpioa); 422 if (ret < 0) { |
423 dev_err(vb_gpio->gpioa.dev, "could not add gpio a"); | 423 dev_err(vb_gpio->gpioa.parent, "could not add gpio a"); |
424 goto err_gpioa; 425 } 426 427 /* registering gpio b */ 428 vb_gpio->gpiob.label = "viperboard gpio b"; | 424 goto err_gpioa; 425 } 426 427 /* registering gpio b */ 428 vb_gpio->gpiob.label = "viperboard gpio b"; |
429 vb_gpio->gpiob.dev = &pdev->dev; | 429 vb_gpio->gpiob.parent = &pdev->dev; |
430 vb_gpio->gpiob.owner = THIS_MODULE; 431 vb_gpio->gpiob.base = -1; 432 vb_gpio->gpiob.ngpio = 16; 433 vb_gpio->gpiob.can_sleep = true; 434 vb_gpio->gpiob.set = vprbrd_gpiob_set; 435 vb_gpio->gpiob.get = vprbrd_gpiob_get; 436 vb_gpio->gpiob.direction_input = vprbrd_gpiob_direction_input; 437 vb_gpio->gpiob.direction_output = vprbrd_gpiob_direction_output; 438 ret = gpiochip_add(&vb_gpio->gpiob); 439 if (ret < 0) { | 430 vb_gpio->gpiob.owner = THIS_MODULE; 431 vb_gpio->gpiob.base = -1; 432 vb_gpio->gpiob.ngpio = 16; 433 vb_gpio->gpiob.can_sleep = true; 434 vb_gpio->gpiob.set = vprbrd_gpiob_set; 435 vb_gpio->gpiob.get = vprbrd_gpiob_get; 436 vb_gpio->gpiob.direction_input = vprbrd_gpiob_direction_input; 437 vb_gpio->gpiob.direction_output = vprbrd_gpiob_direction_output; 438 ret = gpiochip_add(&vb_gpio->gpiob); 439 if (ret < 0) { |
440 dev_err(vb_gpio->gpiob.dev, "could not add gpio b"); | 440 dev_err(vb_gpio->gpiob.parent, "could not add gpio b"); |
441 goto err_gpiob; 442 } 443 444 platform_set_drvdata(pdev, vb_gpio); 445 446 return ret; 447 448err_gpiob: --- 62 unchanged lines hidden --- | 441 goto err_gpiob; 442 } 443 444 platform_set_drvdata(pdev, vb_gpio); 445 446 return ret; 447 448err_gpiob: --- 62 unchanged lines hidden --- |