Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003 
0004     bttv-if.c  --  old gpio interface to other kernel modules
0005            don't use in new code, will go away in 2.7
0006            have a look at bttv-gpio.c instead.
0007 
0008     bttv - Bt848 frame grabber driver
0009 
0010     Copyright (C) 1996,97,98 Ralph  Metzler (rjkm@thp.uni-koeln.de)
0011                & Marcus Metzler (mocm@thp.uni-koeln.de)
0012     (c) 1999-2003 Gerd Knorr <kraxel@bytesex.org>
0013 
0014 
0015 */
0016 
0017 #include <linux/module.h>
0018 #include <linux/init.h>
0019 #include <linux/delay.h>
0020 #include <asm/io.h>
0021 
0022 #include "bttvp.h"
0023 
0024 EXPORT_SYMBOL(bttv_get_pcidev);
0025 EXPORT_SYMBOL(bttv_gpio_enable);
0026 EXPORT_SYMBOL(bttv_read_gpio);
0027 EXPORT_SYMBOL(bttv_write_gpio);
0028 
0029 /* ----------------------------------------------------------------------- */
0030 /* Exported functions - for other modules which want to access the         */
0031 /*                      gpio ports (IR for example)                        */
0032 /*                      see bttv.h for comments                            */
0033 
0034 struct pci_dev* bttv_get_pcidev(unsigned int card)
0035 {
0036     if (card >= bttv_num)
0037         return NULL;
0038     if (!bttvs[card])
0039         return NULL;
0040 
0041     return bttvs[card]->c.pci;
0042 }
0043 
0044 
0045 int bttv_gpio_enable(unsigned int card, unsigned long mask, unsigned long data)
0046 {
0047     struct bttv *btv;
0048 
0049     if (card >= bttv_num) {
0050         return -EINVAL;
0051     }
0052 
0053     btv = bttvs[card];
0054     if (!btv)
0055         return -ENODEV;
0056 
0057     gpio_inout(mask,data);
0058     if (bttv_gpio)
0059         bttv_gpio_tracking(btv,"extern enable");
0060     return 0;
0061 }
0062 
0063 int bttv_read_gpio(unsigned int card, unsigned long *data)
0064 {
0065     struct bttv *btv;
0066 
0067     if (card >= bttv_num) {
0068         return -EINVAL;
0069     }
0070 
0071     btv = bttvs[card];
0072     if (!btv)
0073         return -ENODEV;
0074 
0075     if(btv->shutdown) {
0076         return -ENODEV;
0077     }
0078 
0079 /* prior setting BT848_GPIO_REG_INP is (probably) not needed
0080    because we set direct input on init */
0081     *data = gpio_read();
0082     return 0;
0083 }
0084 
0085 int bttv_write_gpio(unsigned int card, unsigned long mask, unsigned long data)
0086 {
0087     struct bttv *btv;
0088 
0089     if (card >= bttv_num) {
0090         return -EINVAL;
0091     }
0092 
0093     btv = bttvs[card];
0094     if (!btv)
0095         return -ENODEV;
0096 
0097 /* prior setting BT848_GPIO_REG_INP is (probably) not needed
0098    because direct input is set on init */
0099     gpio_bits(mask,data);
0100     if (bttv_gpio)
0101         bttv_gpio_tracking(btv,"extern write");
0102     return 0;
0103 }