hid-picolcd.h revision fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205
1fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont/*************************************************************************** 2fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * Copyright (C) 2010-2012 by Bruno Prémont <bonbons@linux-vserver.org> * 3fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * * 4fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * Based on Logitech G13 driver (v0.4) * 5fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * Copyright (C) 2009 by Rick L. Vinyard, Jr. <rvinyard@cs.nmsu.edu> * 6fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * * 7fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * This program is free software: you can redistribute it and/or modify * 8fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * it under the terms of the GNU General Public License as published by * 9fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * the Free Software Foundation, version 2 of the License. * 10fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * * 11fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * This driver is distributed in the hope that it will be useful, but * 12fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * WITHOUT ANY WARRANTY; without even the implied warranty of * 13fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 14fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * General Public License for more details. * 15fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * * 16fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * You should have received a copy of the GNU General Public License * 17fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * along with this software. If not see <http://www.gnu.org/licenses/>. * 18fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont ***************************************************************************/ 19fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 20fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define PICOLCD_NAME "PicoLCD (graphic)" 21fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 22fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont/* Report numbers */ 23fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_ERROR_CODE 0x10 /* LCD: IN[16] */ 24fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_SUCCESS 0x00 25fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_PARAMETER_MISSING 0x01 26fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_DATA_MISSING 0x02 27fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_BLOCK_READ_ONLY 0x03 28fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_BLOCK_NOT_ERASABLE 0x04 29fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_BLOCK_TOO_BIG 0x05 30fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_SECTION_OVERFLOW 0x06 31fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_INVALID_CMD_LEN 0x07 32fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define ERR_INVALID_DATA_LEN 0x08 33fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_KEY_STATE 0x11 /* LCD: IN[2] */ 34fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_IR_DATA 0x21 /* LCD: IN[63] */ 35fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_EE_DATA 0x32 /* LCD: IN[63] */ 36fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_MEMORY 0x41 /* LCD: IN[63] */ 37fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_LED_STATE 0x81 /* LCD: OUT[1] */ 38fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_BRIGHTNESS 0x91 /* LCD: OUT[1] */ 39fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_CONTRAST 0x92 /* LCD: OUT[1] */ 40fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_RESET 0x93 /* LCD: OUT[2] */ 41fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_LCD_CMD 0x94 /* LCD: OUT[63] */ 42fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_LCD_DATA 0x95 /* LCD: OUT[63] */ 43fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_LCD_CMD_DATA 0x96 /* LCD: OUT[63] */ 44fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_EE_READ 0xa3 /* LCD: OUT[63] */ 45fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_EE_WRITE 0xa4 /* LCD: OUT[63] */ 46fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_ERASE_MEMORY 0xb2 /* LCD: OUT[2] */ 47fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_READ_MEMORY 0xb3 /* LCD: OUT[3] */ 48fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_WRITE_MEMORY 0xb4 /* LCD: OUT[63] */ 49fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_SPLASH_RESTART 0xc1 /* LCD: OUT[1] */ 50fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_EXIT_KEYBOARD 0xef /* LCD: OUT[2] */ 51fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_VERSION 0xf1 /* LCD: IN[2],OUT[1] Bootloader: IN[2],OUT[1] */ 52fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_BL_ERASE_MEMORY 0xf2 /* Bootloader: IN[36],OUT[4] */ 53fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_BL_READ_MEMORY 0xf3 /* Bootloader: IN[36],OUT[4] */ 54fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_BL_WRITE_MEMORY 0xf4 /* Bootloader: IN[36],OUT[36] */ 55fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_DEVID 0xf5 /* LCD: IN[5], OUT[1] Bootloader: IN[5],OUT[1] */ 56fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_SPLASH_SIZE 0xf6 /* LCD: IN[4], OUT[1] */ 57fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_HOOK_VERSION 0xf7 /* LCD: IN[2], OUT[1] */ 58fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define REPORT_EXIT_FLASHER 0xff /* Bootloader: OUT[2] */ 59fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 60fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont/* Description of in-progress IO operation, used for operations 61fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont * that trigger response from device */ 62fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstruct picolcd_pending { 63fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *out_report; 64fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *in_report; 65fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct completion ready; 66fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont int raw_size; 67fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 raw_data[64]; 68fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont}; 69fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 70fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 71fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define PICOLCD_KEYS 17 72fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 73fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont/* Per device data structure */ 74fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstruct picolcd_data { 75fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev; 76fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_DEBUG_FS 77fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct dentry *debug_reset; 78fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct dentry *debug_eeprom; 79fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct dentry *debug_flash; 80fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct mutex mutex_flash; 81fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont int addr_sz; 82fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif 83fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 version[2]; 84fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont unsigned short opmode_delay; 85fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont /* input stuff */ 86fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 pressed_keys[2]; 87fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct input_dev *input_keys; 88fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct input_dev *input_cir; 89fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont unsigned short keycode[PICOLCD_KEYS]; 90fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 91fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_FB 92fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont /* Framebuffer stuff */ 93fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 fb_update_rate; 94fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 fb_bpp; 95fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 fb_force; 96fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 *fb_vbitmap; /* local copy of what was sent to PicoLCD */ 97fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 *fb_bitmap; /* framebuffer */ 98fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct fb_info *fb_info; 99fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct fb_deferred_io fb_defio; 100fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_FB */ 101fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LCD 102fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct lcd_device *lcd; 103fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 lcd_contrast; 104fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LCD */ 105fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_BACKLIGHT 106fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct backlight_device *backlight; 107fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 lcd_brightness; 108fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 lcd_power; 109fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_BACKLIGHT */ 110fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LEDS 111fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont /* LED stuff */ 112fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 led_state; 113fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct led_classdev *led[8]; 114fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LEDS */ 115fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 116fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont /* Housekeeping stuff */ 117fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont spinlock_t lock; 118fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct mutex mutex; 119fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct picolcd_pending *pending; 120fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont int status; 121fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define PICOLCD_BOOTLOADER 1 122fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define PICOLCD_FAILED 2 123fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define PICOLCD_READY_FB 4 124fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont}; 125fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 126fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 127fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont/* Find a given report */ 128fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_in_report(id, dev) picolcd_report(id, dev, HID_INPUT_REPORT) 129fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_out_report(id, dev) picolcd_report(id, dev, HID_OUTPUT_REPORT) 130fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 131fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstruct hid_report *picolcd_report(int id, struct hid_device *hdev, int dir); 132fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 133fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_DEBUG_FS 134fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_debug_out_report(struct picolcd_data *data, 135fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev, struct hid_report *report); 136fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define usbhid_submit_report(a, b, c) \ 137fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont do { \ 138fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont picolcd_debug_out_report(hid_get_drvdata(a), a, b); \ 139fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont usbhid_submit_report(a, b, c); \ 140fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont } while (0) 141fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 142fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_debug_raw_event(struct picolcd_data *data, 143fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev, struct hid_report *report, 144fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 *raw_data, int size); 145fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 146fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_init_devfs(struct picolcd_data *data, 147fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *eeprom_r, struct hid_report *eeprom_w, 148fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *flash_r, struct hid_report *flash_w, 149fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *reset); 150fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 151fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_devfs(struct picolcd_data *data); 152fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 153fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_debug_raw_event(struct picolcd_data *data, 154fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev, struct hid_report *report, 155fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 *raw_data, int size) 156fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 157fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 158fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_init_devfs(struct picolcd_data *data, 159fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *eeprom_r, struct hid_report *eeprom_w, 160fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *flash_r, struct hid_report *flash_w, 161fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *reset) 162fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 163fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 164fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_devfs(struct picolcd_data *data) 165fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 166fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 167fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_debug_raw_event(struct picolcd_data *data, 168fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev, struct hid_report *report, 169fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 *raw_data, int size) 170fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 171fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 172fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_DEBUG_FS */ 173fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 174fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 175fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_FB 176fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_fb_reset(struct picolcd_data *data, int clear); 177fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 178fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_framebuffer(struct picolcd_data *data); 179fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 180fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_framebuffer(struct picolcd_data *data); 181fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 182fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_fb_unload(void); 183fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 184fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_fb_refresh(struct picolcd_data *data); 185fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_fbinfo(d) ((d)->fb_info) 186fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 187fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_fb_reset(struct picolcd_data *data, int clear) 188fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 189fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 190fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 191fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_framebuffer(struct picolcd_data *data) 192fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 193fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 194fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 195fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_framebuffer(struct picolcd_data *data) 196fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 197fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 198fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_fb_unload(void) 199fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 200fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 201fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_fb_refresh(struct picolcd_data *data) 202fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 203fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 204fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_fbinfo(d) NULL 205fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_FB */ 206fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 207fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 208fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_BACKLIGHT 209fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_backlight(struct picolcd_data *data, 210fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report); 211fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 212fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_backlight(struct picolcd_data *data); 213fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 214fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_resume_backlight(struct picolcd_data *data); 215fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 216fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_suspend_backlight(struct picolcd_data *data); 217fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 218fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_backlight(struct picolcd_data *data, 219fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report) 220fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 221fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 222fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 223fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_backlight(struct picolcd_data *data) 224fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 225fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 226fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_resume_backlight(struct picolcd_data *data) 227fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 228fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 229fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 230fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_suspend_backlight(struct picolcd_data *data) 231fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 232fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 233fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 234fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_BACKLIGHT */ 235fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 236fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 237fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LCD 238fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_lcd(struct picolcd_data *data, 239fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report); 240fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 241fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_lcd(struct picolcd_data *data); 242fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 243fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_resume_lcd(struct picolcd_data *data); 244fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 245fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_lcd(struct picolcd_data *data, 246fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report) 247fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 248fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 249fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 250fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_lcd(struct picolcd_data *data) 251fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 252fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 253fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_resume_lcd(struct picolcd_data *data) 254fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 255fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 256fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 257fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LCD */ 258fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 259fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 260fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LEDS 261fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_leds(struct picolcd_data *data, 262fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report); 263fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 264fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_leds(struct picolcd_data *data); 265fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 266fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_leds_set(struct picolcd_data *data); 267fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 268fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_leds(struct picolcd_data *data, 269fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report) 270fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 271fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 272fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 273fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_leds(struct picolcd_data *data) 274fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 275fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 276fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_leds_set(struct picolcd_data *data) 277fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 278fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 279fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LEDS */ 280fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 281fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 282fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_CIR 283fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_raw_cir(struct picolcd_data *data, 284fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report, u8 *raw_data, int size); 285fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 286fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_cir(struct picolcd_data *data, struct hid_report *report); 287fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 288fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_cir(struct picolcd_data *data); 289fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 290fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_raw_cir(struct picolcd_data *data, 291fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report, u8 *raw_data, int size) 292fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 293fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 1; 294fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 295fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_cir(struct picolcd_data *data, struct hid_report *report) 296fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 297fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 298fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 299fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_cir(struct picolcd_data *data) 300fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 301fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 302fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LIRC */ 303fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 304fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_reset(struct hid_device *hdev); 305fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstruct picolcd_pending *picolcd_send_and_wait(struct hid_device *hdev, 306fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont int report_id, const u8 *raw_data, int size); 307