diff options
| -rw-r--r-- | drivers/hid/Kconfig | 53 | ||||
| -rw-r--r-- | drivers/hid/hid-picolcd.c | 40 |
2 files changed, 64 insertions, 29 deletions
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index a2ecd83bfe89..0e8aa63e3f55 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig | |||
| @@ -265,11 +265,6 @@ config HID_PETALYNX | |||
| 265 | config HID_PICOLCD | 265 | config HID_PICOLCD |
| 266 | tristate "PicoLCD (graphic version)" | 266 | tristate "PicoLCD (graphic version)" |
| 267 | depends on USB_HID | 267 | depends on USB_HID |
| 268 | select FB_DEFERRED_IO if FB | ||
| 269 | select FB_SYS_FILLRECT if FB | ||
| 270 | select FB_SYS_COPYAREA if FB | ||
| 271 | select FB_SYS_IMAGEBLIT if FB | ||
| 272 | select FB_SYS_FOPS if FB | ||
| 273 | ---help--- | 268 | ---help--- |
| 274 | This provides support for Minibox PicoLCD devices, currently | 269 | This provides support for Minibox PicoLCD devices, currently |
| 275 | only the graphical ones are supported. | 270 | only the graphical ones are supported. |
| @@ -277,14 +272,54 @@ config HID_PICOLCD | |||
| 277 | This includes support for the following device features: | 272 | This includes support for the following device features: |
| 278 | - Keypad | 273 | - Keypad |
| 279 | - Switching between Firmware and Flash mode | 274 | - Switching between Firmware and Flash mode |
| 280 | - Framebuffer for monochrome 256x64 display | ||
| 281 | - Backlight control (needs CONFIG_BACKLIGHT_CLASS_DEVICE) | ||
| 282 | - Contrast control (needs CONFIG_LCD_CLASS_DEVICE) | ||
| 283 | - General purpose outputs (needs CONFIG_LEDS_CLASS) | ||
| 284 | - EEProm / Flash access (via debugfs) | 275 | - EEProm / Flash access (via debugfs) |
| 276 | Features selectively enabled: | ||
| 277 | - Framebuffer for monochrome 256x64 display | ||
| 278 | - Backlight control | ||
| 279 | - Contrast control | ||
| 280 | - General purpose outputs | ||
| 285 | Features that are not (yet) supported: | 281 | Features that are not (yet) supported: |
| 286 | - IR | 282 | - IR |
| 287 | 283 | ||
| 284 | config HID_PICOLCD_FB | ||
| 285 | bool "Framebuffer support" if EMBEDDED | ||
| 286 | default !EMBEDDED | ||
| 287 | depends on HID_PICOLCD | ||
| 288 | depends on HID_PICOLCD=FB || FB=y | ||
| 289 | select FB_DEFERRED_IO | ||
| 290 | select FB_SYS_FILLRECT | ||
| 291 | select FB_SYS_COPYAREA | ||
| 292 | select FB_SYS_IMAGEBLIT | ||
| 293 | select FB_SYS_FOPS | ||
| 294 | ---help--- | ||
| 295 | Provide access to PicoLCD's 256x64 monochrome display via a | ||
| 296 | frambuffer device. | ||
| 297 | |||
| 298 | config HID_PICOLCD_BACKLIGHT | ||
| 299 | bool "Backlight control" if EMBEDDED | ||
| 300 | default !EMBEDDED | ||
| 301 | depends on HID_PICOLCD | ||
| 302 | depends on HID_PICOLCD=BACKLIGHT_CLASS_DEVICE || BACKLIGHT_CLASS_DEVICE=y | ||
| 303 | ---help--- | ||
| 304 | Provide access to PicoLCD's backlight control via backlight | ||
| 305 | class. | ||
| 306 | |||
| 307 | config HID_PICOLCD_LCD | ||
| 308 | bool "Contrast control" if EMBEDDED | ||
| 309 | default !EMBEDDED | ||
| 310 | depends on HID_PICOLCD | ||
| 311 | depends on HID_PICOLCD=LCD_CLASS_DEVICE || LCD_CLASS_DEVICE=y | ||
| 312 | ---help--- | ||
| 313 | Provide access to PicoLCD's LCD contrast via lcd class. | ||
| 314 | |||
| 315 | config HID_PICOLCD_LEDS | ||
| 316 | bool "GPO via leds class" if EMBEDDED | ||
| 317 | default !EMBEDDED | ||
| 318 | depends on HID_PICOLCD | ||
| 319 | depends on HID_PICOLCD=LEDS_CLASS || LEDS_CLASS=y | ||
| 320 | ---help--- | ||
| 321 | Provide access to PicoLCD's GPO pins via leds class. | ||
| 322 | |||
| 288 | config HID_QUANTA | 323 | config HID_QUANTA |
| 289 | tristate "Quanta Optical Touch" | 324 | tristate "Quanta Optical Touch" |
| 290 | depends on USB_HID | 325 | depends on USB_HID |
diff --git a/drivers/hid/hid-picolcd.c b/drivers/hid/hid-picolcd.c index 0eacc6b6d5bb..0fbc7d396164 100644 --- a/drivers/hid/hid-picolcd.c +++ b/drivers/hid/hid-picolcd.c | |||
| @@ -77,7 +77,7 @@ | |||
| 77 | #define REPORT_HOOK_VERSION 0xf7 /* LCD: IN[2], OUT[1] */ | 77 | #define REPORT_HOOK_VERSION 0xf7 /* LCD: IN[2], OUT[1] */ |
| 78 | #define REPORT_EXIT_FLASHER 0xff /* Bootloader: OUT[2] */ | 78 | #define REPORT_EXIT_FLASHER 0xff /* Bootloader: OUT[2] */ |
| 79 | 79 | ||
| 80 | #if defined(CONFIG_FB) || defined(CONFIG_FB_MODULE) | 80 | #ifdef CONFIG_HID_PICOLCD_FB |
| 81 | /* Framebuffer | 81 | /* Framebuffer |
| 82 | * | 82 | * |
| 83 | * The PicoLCD use a Topway LCD module of 256x64 pixel | 83 | * The PicoLCD use a Topway LCD module of 256x64 pixel |
| @@ -128,7 +128,7 @@ static const struct fb_var_screeninfo picolcdfb_var = { | |||
| 128 | .bits_per_pixel = 1, | 128 | .bits_per_pixel = 1, |
| 129 | .grayscale = 1, | 129 | .grayscale = 1, |
| 130 | }; | 130 | }; |
| 131 | #endif /* CONFIG_FB */ | 131 | #endif /* CONFIG_HID_PICOLCD_FB */ |
| 132 | 132 | ||
| 133 | /* Input device | 133 | /* Input device |
| 134 | * | 134 | * |
| @@ -183,7 +183,7 @@ struct picolcd_data { | |||
| 183 | struct input_dev *input_cir; | 183 | struct input_dev *input_cir; |
| 184 | unsigned short keycode[PICOLCD_KEYS]; | 184 | unsigned short keycode[PICOLCD_KEYS]; |
| 185 | 185 | ||
| 186 | #if defined(CONFIG_FB) || defined(CONFIG_FB_MODULE) | 186 | #ifdef CONFIG_HID_PICOLCD_FB |
| 187 | /* Framebuffer stuff */ | 187 | /* Framebuffer stuff */ |
| 188 | u8 fb_update_rate; | 188 | u8 fb_update_rate; |
| 189 | u8 fb_bpp; | 189 | u8 fb_bpp; |
| @@ -191,21 +191,21 @@ struct picolcd_data { | |||
| 191 | u8 *fb_bitmap; /* framebuffer */ | 191 | u8 *fb_bitmap; /* framebuffer */ |
| 192 | struct fb_info *fb_info; | 192 | struct fb_info *fb_info; |
| 193 | struct fb_deferred_io fb_defio; | 193 | struct fb_deferred_io fb_defio; |
| 194 | #endif /* CONFIG_FB */ | 194 | #endif /* CONFIG_HID_PICOLCD_FB */ |
| 195 | #if defined(CONFIG_LCD_CLASS_DEVICE) || defined(CONFIG_LCD_CLASS_DEVICE_MODULE) | 195 | #ifdef CONFIG_HID_PICOLCD_LCD |
| 196 | struct lcd_device *lcd; | 196 | struct lcd_device *lcd; |
| 197 | u8 lcd_contrast; | 197 | u8 lcd_contrast; |
| 198 | #endif | 198 | #endif /* CONFIG_HID_PICOLCD_LCD */ |
| 199 | #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) | 199 | #ifdef CONFIG_HID_PICOLCD_BACKLIGHT |
| 200 | struct backlight_device *backlight; | 200 | struct backlight_device *backlight; |
| 201 | u8 lcd_brightness; | 201 | u8 lcd_brightness; |
| 202 | u8 lcd_power; | 202 | u8 lcd_power; |
| 203 | #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */ | 203 | #endif /* CONFIG_HID_PICOLCD_BACKLIGHT */ |
| 204 | #if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) | 204 | #ifdef CONFIG_HID_PICOLCD_LEDS |
| 205 | /* LED stuff */ | 205 | /* LED stuff */ |
| 206 | u8 led_state; | 206 | u8 led_state; |
| 207 | struct led_classdev *led[8]; | 207 | struct led_classdev *led[8]; |
| 208 | #endif /* CONFIG_LEDS_CLASS */ | 208 | #endif /* CONFIG_HID_PICOLCD_LEDS */ |
| 209 | 209 | ||
| 210 | /* Housekeeping stuff */ | 210 | /* Housekeeping stuff */ |
| 211 | spinlock_t lock; | 211 | spinlock_t lock; |
| @@ -287,7 +287,7 @@ static struct picolcd_pending *picolcd_send_and_wait(struct hid_device *hdev, | |||
| 287 | return work; | 287 | return work; |
| 288 | } | 288 | } |
| 289 | 289 | ||
| 290 | #if defined(CONFIG_FB) || defined(CONFIG_FB_MODULE) | 290 | #ifdef CONFIG_HID_PICOLCD_FB |
| 291 | /* Send a given tile to PicoLCD */ | 291 | /* Send a given tile to PicoLCD */ |
| 292 | static int picolcd_fb_send_tile(struct hid_device *hdev, int chip, int tile) | 292 | static int picolcd_fb_send_tile(struct hid_device *hdev, int chip, int tile) |
| 293 | { | 293 | { |
| @@ -766,9 +766,9 @@ static void picolcd_exit_framebuffer(struct picolcd_data *data) | |||
| 766 | { | 766 | { |
| 767 | } | 767 | } |
| 768 | #define picolcd_fbinfo(d) NULL | 768 | #define picolcd_fbinfo(d) NULL |
| 769 | #endif /* CONFIG_FB */ | 769 | #endif /* CONFIG_HID_PICOLCD_FB */ |
| 770 | 770 | ||
| 771 | #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) | 771 | #ifdef CONFIG_HID_PICOLCD_BACKLIGHT |
| 772 | /* | 772 | /* |
| 773 | * backlight class device | 773 | * backlight class device |
| 774 | */ | 774 | */ |
| @@ -864,9 +864,9 @@ static inline int picolcd_resume_backlight(struct picolcd_data *data) | |||
| 864 | { | 864 | { |
| 865 | return 0; | 865 | return 0; |
| 866 | } | 866 | } |
| 867 | #endif /* CONFIG_BACKLIGHT_CLASS_DEVICE */ | 867 | #endif /* CONFIG_HID_PICOLCD_BACKLIGHT */ |
| 868 | 868 | ||
| 869 | #if defined(CONFIG_LCD_CLASS_DEVICE) || defined(CONFIG_LCD_CLASS_DEVICE_MODULE) | 869 | #ifdef CONFIG_HID_PICOLCD_LCD |
| 870 | /* | 870 | /* |
| 871 | * lcd class device | 871 | * lcd class device |
| 872 | */ | 872 | */ |
| @@ -957,9 +957,9 @@ static inline int picolcd_resume_lcd(struct picolcd_data *data) | |||
| 957 | { | 957 | { |
| 958 | return 0; | 958 | return 0; |
| 959 | } | 959 | } |
| 960 | #endif /* CONFIG_LCD_CLASS_DEVICE */ | 960 | #endif /* CONFIG_HID_PICOLCD_LCD */ |
| 961 | 961 | ||
| 962 | #if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) | 962 | #ifdef CONFIG_HID_PICOLCD_LEDS |
| 963 | /** | 963 | /** |
| 964 | * LED class device | 964 | * LED class device |
| 965 | */ | 965 | */ |
| @@ -1104,7 +1104,7 @@ static inline int picolcd_leds_set(struct picolcd_data *data) | |||
| 1104 | { | 1104 | { |
| 1105 | return 0; | 1105 | return 0; |
| 1106 | } | 1106 | } |
| 1107 | #endif /* CONFIG_LEDS_CLASS */ | 1107 | #endif /* CONFIG_HID_PICOLCD_LEDS */ |
| 1108 | 1108 | ||
| 1109 | /* | 1109 | /* |
| 1110 | * input class device | 1110 | * input class device |
| @@ -1243,10 +1243,10 @@ static int picolcd_reset(struct hid_device *hdev) | |||
| 1243 | 1243 | ||
| 1244 | picolcd_resume_lcd(data); | 1244 | picolcd_resume_lcd(data); |
| 1245 | picolcd_resume_backlight(data); | 1245 | picolcd_resume_backlight(data); |
| 1246 | #if defined(CONFIG_FB) || defined(CONFIG_FB_MODULE) | 1246 | #ifdef CONFIG_HID_PICOLCD_FB |
| 1247 | if (data->fb_info) | 1247 | if (data->fb_info) |
| 1248 | schedule_delayed_work(&data->fb_info->deferred_work, 0); | 1248 | schedule_delayed_work(&data->fb_info->deferred_work, 0); |
| 1249 | #endif /* CONFIG_FB */ | 1249 | #endif /* CONFIG_HID_PICOLCD_FB */ |
| 1250 | 1250 | ||
| 1251 | picolcd_leds_set(data); | 1251 | picolcd_leds_set(data); |
| 1252 | return 0; | 1252 | return 0; |
