Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] em28xx: remove GPIO register caching

The GPIO register caching is the result of wrong assumptions and incomplete
knowledge about the GPIO registers and their functionality.
Today, we know that it is not needed.
It is also limited to a single register and therefore incomplete (newer chips
are using multiple registers).
Instead of extending the caching, get rid of it, because it has no real
benefits and just bloats/complicates the code.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Frank Schaefer and committed by
Mauro Carvalho Chehab
6914d70e bc677fff

+2 -43
-12
drivers/media/usb/em28xx/em28xx-cards.c
··· 2896 2896 2897 2897 em28xx_set_model(dev); 2898 2898 2899 - /* Set the default GPO/GPIO for legacy devices */ 2900 - dev->reg_gpo_num = EM2880_R04_GPO; 2901 - dev->reg_gpio_num = EM2820_R08_GPIO_CTRL; 2902 - 2903 2899 dev->wait_after_write = 5; 2904 2900 2905 2901 /* Based on the Chip ID, set the device configuration */ ··· 2943 2947 break; 2944 2948 case CHIP_ID_EM2874: 2945 2949 chip_name = "em2874"; 2946 - dev->reg_gpio_num = EM2874_R80_GPIO_P0_CTRL; 2947 2950 dev->wait_after_write = 0; 2948 2951 dev->eeprom_addrwidth_16bit = 1; 2949 2952 break; 2950 2953 case CHIP_ID_EM28174: 2951 2954 chip_name = "em28174"; 2952 - dev->reg_gpio_num = EM2874_R80_GPIO_P0_CTRL; 2953 2955 dev->wait_after_write = 0; 2954 2956 dev->eeprom_addrwidth_16bit = 1; 2955 2957 break; ··· 2957 2963 break; 2958 2964 case CHIP_ID_EM2884: 2959 2965 chip_name = "em2884"; 2960 - dev->reg_gpio_num = EM2874_R80_GPIO_P0_CTRL; 2961 2966 dev->wait_after_write = 0; 2962 2967 dev->eeprom_addrwidth_16bit = 1; 2963 2968 break; ··· 2984 2991 2985 2992 return 0; 2986 2993 } 2987 - 2988 - /* Prepopulate cached GPO register content */ 2989 - retval = em28xx_read_reg(dev, dev->reg_gpo_num); 2990 - if (retval >= 0) 2991 - dev->reg_gpo = retval; 2992 2994 2993 2995 em28xx_pre_card_setup(dev); 2994 2996
+2 -25
drivers/media/usb/em28xx/em28xx-core.c
··· 193 193 194 194 int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len) 195 195 { 196 - int rc; 197 - 198 - rc = em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len); 199 - 200 - /* Stores GPO/GPIO values at the cache, if changed 201 - Only write values should be stored, since input on a GPIO 202 - register will return the input bits. 203 - Not sure what happens on reading GPO register. 204 - */ 205 - if (rc >= 0) { 206 - if (reg == dev->reg_gpo_num) 207 - dev->reg_gpo = buf[0]; 208 - else if (reg == dev->reg_gpio_num) 209 - dev->reg_gpio = buf[0]; 210 - } 211 - 212 - return rc; 196 + return em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len); 213 197 } 214 198 EXPORT_SYMBOL_GPL(em28xx_write_regs); 215 199 ··· 215 231 int oldval; 216 232 u8 newval; 217 233 218 - /* Uses cache for gpo/gpio registers */ 219 - if (reg == dev->reg_gpo_num) 220 - oldval = dev->reg_gpo; 221 - else if (reg == dev->reg_gpio_num) 222 - oldval = dev->reg_gpio; 223 - else 224 - oldval = em28xx_read_reg(dev, reg); 225 - 234 + oldval = em28xx_read_reg(dev, reg); 226 235 if (oldval < 0) 227 236 return oldval; 228 237
-6
drivers/media/usb/em28xx/em28xx.h
··· 637 637 638 638 enum em28xx_mode mode; 639 639 640 - /* register numbers for GPO/GPIO registers */ 641 - u16 reg_gpo_num, reg_gpio_num; 642 - 643 - /* Caches GPO and GPIO registers */ 644 - unsigned char reg_gpo, reg_gpio; 645 - 646 640 /* Snapshot button */ 647 641 char snapshot_button_path[30]; /* path of the input dev */ 648 642 struct input_dev *sbutton_input_dev;