bttv-if.c (2178B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 4 bttv-if.c -- old gpio interface to other kernel modules 5 don't use in new code, will go away in 2.7 6 have a look at bttv-gpio.c instead. 7 8 bttv - Bt848 frame grabber driver 9 10 Copyright (C) 1996,97,98 Ralph Metzler (rjkm@thp.uni-koeln.de) 11 & Marcus Metzler (mocm@thp.uni-koeln.de) 12 (c) 1999-2003 Gerd Knorr <kraxel@bytesex.org> 13 14 15*/ 16 17#include <linux/module.h> 18#include <linux/init.h> 19#include <linux/delay.h> 20#include <asm/io.h> 21 22#include "bttvp.h" 23 24EXPORT_SYMBOL(bttv_get_pcidev); 25EXPORT_SYMBOL(bttv_gpio_enable); 26EXPORT_SYMBOL(bttv_read_gpio); 27EXPORT_SYMBOL(bttv_write_gpio); 28 29/* ----------------------------------------------------------------------- */ 30/* Exported functions - for other modules which want to access the */ 31/* gpio ports (IR for example) */ 32/* see bttv.h for comments */ 33 34struct pci_dev* bttv_get_pcidev(unsigned int card) 35{ 36 if (card >= bttv_num) 37 return NULL; 38 if (!bttvs[card]) 39 return NULL; 40 41 return bttvs[card]->c.pci; 42} 43 44 45int bttv_gpio_enable(unsigned int card, unsigned long mask, unsigned long data) 46{ 47 struct bttv *btv; 48 49 if (card >= bttv_num) { 50 return -EINVAL; 51 } 52 53 btv = bttvs[card]; 54 if (!btv) 55 return -ENODEV; 56 57 gpio_inout(mask,data); 58 if (bttv_gpio) 59 bttv_gpio_tracking(btv,"extern enable"); 60 return 0; 61} 62 63int bttv_read_gpio(unsigned int card, unsigned long *data) 64{ 65 struct bttv *btv; 66 67 if (card >= bttv_num) { 68 return -EINVAL; 69 } 70 71 btv = bttvs[card]; 72 if (!btv) 73 return -ENODEV; 74 75 if(btv->shutdown) { 76 return -ENODEV; 77 } 78 79/* prior setting BT848_GPIO_REG_INP is (probably) not needed 80 because we set direct input on init */ 81 *data = gpio_read(); 82 return 0; 83} 84 85int bttv_write_gpio(unsigned int card, unsigned long mask, unsigned long data) 86{ 87 struct bttv *btv; 88 89 if (card >= bttv_num) { 90 return -EINVAL; 91 } 92 93 btv = bttvs[card]; 94 if (!btv) 95 return -ENODEV; 96 97/* prior setting BT848_GPIO_REG_INP is (probably) not needed 98 because direct input is set on init */ 99 gpio_bits(mask,data); 100 if (bttv_gpio) 101 bttv_gpio_tracking(btv,"extern write"); 102 return 0; 103}