em28xx: add register defines for em25xx/em276x/7x/8x GPIO registers
Subsystems (2)
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.
Signed-off-by Frank Schäfer <[email protected]>
--- drivers/media/usb/em28xx/em28xx-reg.h | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/media/usb/em28xx/em28xx-reg.h +8 -0
@@ -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
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.
Signed-off-by Frank Schäfer <[email protected]>
--- 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
@@ -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
@@ -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