This source file includes following definitions.
- cx25821_set_gpiopin_direction
- cx25821_set_gpiopin_logicvalue
- cx25821_gpio_init
1
2
3
4
5
6
7
8
9 #include <linux/module.h>
10 #include "cx25821.h"
11
12
13 void cx25821_set_gpiopin_direction(struct cx25821_dev *dev,
14 int pin_number, int pin_logic_value)
15 {
16 int bit = pin_number;
17 u32 gpio_oe_reg = GPIO_LO_OE;
18 u32 gpio_register = 0;
19 u32 value = 0;
20
21
22 if (pin_number >= 47)
23 return;
24
25 if (pin_number > 31) {
26 bit = pin_number - 31;
27 gpio_oe_reg = GPIO_HI_OE;
28 }
29
30
31 gpio_register = cx_read(gpio_oe_reg);
32
33 if (pin_logic_value == 1)
34 value = gpio_register | Set_GPIO_Bit(bit);
35 else
36 value = gpio_register & Clear_GPIO_Bit(bit);
37
38 cx_write(gpio_oe_reg, value);
39 }
40 EXPORT_SYMBOL(cx25821_set_gpiopin_direction);
41
42 static void cx25821_set_gpiopin_logicvalue(struct cx25821_dev *dev,
43 int pin_number, int pin_logic_value)
44 {
45 int bit = pin_number;
46 u32 gpio_reg = GPIO_LO;
47 u32 value = 0;
48
49
50 if (pin_number >= 47)
51 return;
52
53
54 cx25821_set_gpiopin_direction(dev, pin_number, 0);
55
56 if (pin_number > 31) {
57 bit = pin_number - 31;
58 gpio_reg = GPIO_HI;
59 }
60
61 value = cx_read(gpio_reg);
62
63 if (pin_logic_value == 0)
64 value &= Clear_GPIO_Bit(bit);
65 else
66 value |= Set_GPIO_Bit(bit);
67
68 cx_write(gpio_reg, value);
69 }
70
71 void cx25821_gpio_init(struct cx25821_dev *dev)
72 {
73 if (dev == NULL)
74 return;
75
76 switch (dev->board) {
77 case CX25821_BOARD_CONEXANT_ATHENA10:
78 default:
79
80 cx25821_set_gpiopin_logicvalue(dev, 5, 1);
81 msleep(20);
82 break;
83 }
84
85 }