Skip to contentSkip to conversation

em28xx: add register defines for em25xx/em276x/7x/8x GPIO registers

PATCH New Frank Schäfer 1 participant 2 messages May 24, 2013

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/2 em28xx: add register defines for em25xx/em276x/7x/8x GPIO registers

em25xx/em276x/7x/8x provides 3 GPIO register sets, each of them consisting of separate read and a write registers.

---
 drivers/media/usb/em28xx/em28xx-reg.h | 8 ++++++++
 1 file changed, 8 insertions(+)
drivers/media/usb/em28xx/em28xx-reg.h +8 -0
index 622871d..17bdb78 100644
@@ -210,6 +210,14 @@
 #define EM2874_TS2_FILTER_ENABLE  (1 << 5)
 #define EM2874_TS2_NULL_DISCARD   (1 << 6)
 
+/* em25xx, em276x/7x/8x GPIO registers */
+#define EM25XX_R80_GPIO_P0_W    0x80
+#define EM25XX_R81_GPIO_P1_W    0x81
+#define EM25XX_R83_GPIO_P3_W    0x83
+#define EM25XX_R84_GPIO_P0_R    0x84
+#define EM25XX_R85_GPIO_P1_R    0x85
+#define EM25XX_R87_GPIO_P3_R    0x87
+
 /* register settings */
 #define EM2800_AUDIO_SRC_TUNER  0x0d
 #define EM2800_AUDIO_SRC_LINE   0x0c
Signature · 1 line
1.8.1.2
#1 lore raw

PATCH 2/2 em28xx: complete GPIO register caching

The current GPIO register caching is incomplete.
Only one GPIO register and one GPO register is cached, but nearly all chip variants have more than one GPIO register. Caching of pure GPO registers (reg 0x04) also isn't needed. At least parts of register 0x0c seem to be assigned to GPIO lines, so we need to cache this register, too.

---
 drivers/media/usb/em28xx/em28xx-cards.c | 12 ---------
 drivers/media/usb/em28xx/em28xx-core.c  | 43 ++++++++++++++++++++++-----------
 drivers/media/usb/em28xx/em28xx.h       | 15 ++++++++----
 3 files changed, 39 insertions(+), 31 deletions(-)
drivers/media/usb/em28xx/em28xx-cards.c +0 -12
index 83bfbe4..7486533 100644
@@ -2881,10 +2881,6 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
 
 	em28xx_set_model(dev);
 
-	/* Set the default GPO/GPIO for legacy devices */
-	dev->reg_gpo_num = EM2880_R04_GPO;
-	dev->reg_gpio_num = EM28XX_R08_GPIO;
-
 	dev->wait_after_write = 5;
 
 	/* Based on the Chip ID, set the device configuration */
@@ -2932,13 +2928,11 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
 			break;
 		case CHIP_ID_EM2874:
 			chip_name = "em2874";
-			dev->reg_gpio_num = EM2874_R80_GPIO;
 			dev->wait_after_write = 0;
 			dev->eeprom_addrwidth_16bit = 1;
 			break;
 		case CHIP_ID_EM28174:
 			chip_name = "em28174";
-			dev->reg_gpio_num = EM2874_R80_GPIO;
 			dev->wait_after_write = 0;
 			dev->eeprom_addrwidth_16bit = 1;
 			break;
@@ -2948,7 +2942,6 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
 			break;
 		case CHIP_ID_EM2884:
 			chip_name = "em2884";
-			dev->reg_gpio_num = EM2874_R80_GPIO;
 			dev->wait_after_write = 0;
 			dev->eeprom_addrwidth_16bit = 1;
 			break;
@@ -2977,11 +2970,6 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
 		return 0;
 	}
 
-	/* Prepopulate cached GPO register content */
-	retval = em28xx_read_reg(dev, dev->reg_gpo_num);
-	if (retval >= 0)
-		dev->reg_gpo = retval;
-
 	em28xx_pre_card_setup(dev);
 
 	if (!dev->board.is_em2800) {
drivers/media/usb/em28xx/em28xx-core.c +29 -14

56 lines not on this page · raw message

drivers/media/usb/em28xx/em28xx.h +10 -5
index a9323b6..a536eb6 100644
@@ -636,11 +636,16 @@ struct em28xx {
 
 	enum em28xx_mode mode;
 
-	/* register numbers for GPO/GPIO registers */
-	u16 reg_gpo_num, reg_gpio_num;
-
-	/* Caches GPO and GPIO registers */
-	unsigned char	reg_gpo, reg_gpio;
+	/* GPIO register values */
+	/*
+	 * NOTE: GPI config needs to be cached for em28xx_write_reg_bits().
+	 *       There is no need to cache pure GPO registers.
+	 */
+	unsigned char gpio_reg08_val;
+	unsigned char gpio_reg0C_val;
+	unsigned char gpio_reg80_val;
+	unsigned char gpio_reg81_val;
+	unsigned char gpio_reg83_val;
 
 	/* Snapshot button */
 	char snapshot_button_path[30];	/* path of the input dev */
Signature · 1 line
1.8.1.2