0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
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
0031
0032
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
0080
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
0098
0099 gpio_bits(mask,data);
0100 if (bttv_gpio)
0101 bttv_gpio_tracking(btv,"extern write");
0102 return 0;
0103 }