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; 88ae08e324146c89f1059e9d3c3898d0260a988795Bruno Prémont#ifdef CONFIG_HID_PICOLCD_CIR 89ae08e324146c89f1059e9d3c3898d0260a988795Bruno Prémont struct rc_dev *rc_dev; 90ae08e324146c89f1059e9d3c3898d0260a988795Bruno Prémont#endif 91fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont unsigned short keycode[PICOLCD_KEYS]; 92fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 93fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_FB 94fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont /* Framebuffer stuff */ 95fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct fb_info *fb_info; 96fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_FB */ 97fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LCD 98fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct lcd_device *lcd; 99fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 lcd_contrast; 100fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LCD */ 101fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_BACKLIGHT 102fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct backlight_device *backlight; 103fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 lcd_brightness; 104fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 lcd_power; 105fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_BACKLIGHT */ 106fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LEDS 107fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont /* LED stuff */ 108fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 led_state; 109fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct led_classdev *led[8]; 110fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LEDS */ 111fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 112fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont /* Housekeeping stuff */ 113fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont spinlock_t lock; 114fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct mutex mutex; 115fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct picolcd_pending *pending; 116fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont int status; 117fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define PICOLCD_BOOTLOADER 1 118fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define PICOLCD_FAILED 2 119ae08e324146c89f1059e9d3c3898d0260a988795Bruno Prémont#define PICOLCD_CIR_SHUN 4 120fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont}; 121fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 12216048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont#ifdef CONFIG_HID_PICOLCD_FB 12316048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémontstruct picolcd_fb_data { 12416048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont /* Framebuffer stuff */ 12516048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont spinlock_t lock; 12616048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont struct picolcd_data *picolcd; 12716048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont u8 update_rate; 12816048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont u8 bpp; 12916048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont u8 force; 13016048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont u8 ready; 13116048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont u8 *vbitmap; /* local copy of what was sent to PicoLCD */ 13216048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont u8 *bitmap; /* framebuffer */ 13316048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont}; 13416048709b2f6a7e721ac677f9a6741ac1c13ffd7Bruno Prémont#endif /* CONFIG_HID_PICOLCD_FB */ 135fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 136fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont/* Find a given report */ 137fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_in_report(id, dev) picolcd_report(id, dev, HID_INPUT_REPORT) 138fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_out_report(id, dev) picolcd_report(id, dev, HID_OUTPUT_REPORT) 139fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 140fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstruct hid_report *picolcd_report(int id, struct hid_device *hdev, int dir); 141fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 142fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_DEBUG_FS 143fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_debug_out_report(struct picolcd_data *data, 144fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev, struct hid_report *report); 145d881427253da011495f4193663d809d0e9dfa215Benjamin Tissoires#define hid_hw_request(a, b, c) \ 146fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont do { \ 147fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont picolcd_debug_out_report(hid_get_drvdata(a), a, b); \ 148d881427253da011495f4193663d809d0e9dfa215Benjamin Tissoires hid_hw_request(a, b, c); \ 149fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont } while (0) 150fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 151fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_debug_raw_event(struct picolcd_data *data, 152fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev, struct hid_report *report, 153fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 *raw_data, int size); 154fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 155fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_init_devfs(struct picolcd_data *data, 156fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *eeprom_r, struct hid_report *eeprom_w, 157fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *flash_r, struct hid_report *flash_w, 158fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *reset); 159fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 160fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_devfs(struct picolcd_data *data); 161fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 162e9a7c79b9427b9c1ce17a007a80caf3deb390bcdAxel Linstatic inline void picolcd_debug_out_report(struct picolcd_data *data, 163e9a7c79b9427b9c1ce17a007a80caf3deb390bcdAxel Lin struct hid_device *hdev, struct hid_report *report) 164e9a7c79b9427b9c1ce17a007a80caf3deb390bcdAxel Lin{ 165e9a7c79b9427b9c1ce17a007a80caf3deb390bcdAxel Lin} 166fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_debug_raw_event(struct picolcd_data *data, 167fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_device *hdev, struct hid_report *report, 168fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont u8 *raw_data, int size) 169fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 170fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 171fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_init_devfs(struct picolcd_data *data, 172fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *eeprom_r, struct hid_report *eeprom_w, 173fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *flash_r, struct hid_report *flash_w, 174fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *reset) 175fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 176fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 177fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_devfs(struct picolcd_data *data) 178fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 179fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 180fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_DEBUG_FS */ 181fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 182fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 183fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_FB 184fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_fb_reset(struct picolcd_data *data, int clear); 185fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 186fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_framebuffer(struct picolcd_data *data); 187fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 188fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_framebuffer(struct picolcd_data *data); 189fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 190fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_fb_refresh(struct picolcd_data *data); 191fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_fbinfo(d) ((d)->fb_info) 192fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 193fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_fb_reset(struct picolcd_data *data, int clear) 194fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 195fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 196fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 197fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_framebuffer(struct picolcd_data *data) 198fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 199fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 200fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 201fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_framebuffer(struct picolcd_data *data) 202fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 203fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 204fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_fb_refresh(struct picolcd_data *data) 205fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 206fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 207fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#define picolcd_fbinfo(d) NULL 208fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_FB */ 209fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 210fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 211fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_BACKLIGHT 212fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_backlight(struct picolcd_data *data, 213fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report); 214fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 215fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_backlight(struct picolcd_data *data); 216fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 217fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_resume_backlight(struct picolcd_data *data); 218fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 219fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_suspend_backlight(struct picolcd_data *data); 220fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 221fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_backlight(struct picolcd_data *data, 222fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report) 223fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 224fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 225fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 226fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_backlight(struct picolcd_data *data) 227fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 228fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 229fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_resume_backlight(struct picolcd_data *data) 230fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 231fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 232fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 233fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_suspend_backlight(struct picolcd_data *data) 234fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 235fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 236fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 237fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_BACKLIGHT */ 238fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 239fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 240fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LCD 241fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_lcd(struct picolcd_data *data, 242fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report); 243fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 244fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_lcd(struct picolcd_data *data); 245fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 246fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_resume_lcd(struct picolcd_data *data); 247fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 248fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_lcd(struct picolcd_data *data, 249fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report) 250fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 251fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 252fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 253fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_lcd(struct picolcd_data *data) 254fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 255fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 256fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_resume_lcd(struct picolcd_data *data) 257fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 258fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 259fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 260fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LCD */ 261fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 262fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 263fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_LEDS 264fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_leds(struct picolcd_data *data, 265fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report); 266fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 267fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_leds(struct picolcd_data *data); 268fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 269fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_leds_set(struct picolcd_data *data); 270fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 271fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_leds(struct picolcd_data *data, 272fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report) 273fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 274fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 275fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 276fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_leds(struct picolcd_data *data) 277fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 278fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 279fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_leds_set(struct picolcd_data *data) 280fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 281fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 282fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#endif /* CONFIG_HID_PICOLCD_LEDS */ 283fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 284fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 285fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#ifdef CONFIG_HID_PICOLCD_CIR 286fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_raw_cir(struct picolcd_data *data, 287fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report, u8 *raw_data, int size); 288fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 289fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_init_cir(struct picolcd_data *data, struct hid_report *report); 290fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 291fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontvoid picolcd_exit_cir(struct picolcd_data *data); 292fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont#else 293fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_raw_cir(struct picolcd_data *data, 294fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont struct hid_report *report, u8 *raw_data, int size) 295fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 296fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 1; 297fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 298fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline int picolcd_init_cir(struct picolcd_data *data, struct hid_report *report) 299fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 300fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont return 0; 301fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 302fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstatic inline void picolcd_exit_cir(struct picolcd_data *data) 303fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont{ 304fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont} 3054e55467efbc7e52e9e0d8c797c72e6b45c5ee270Paul Bolle#endif /* CONFIG_HID_PICOLCD_CIR */ 306fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont 307fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontint picolcd_reset(struct hid_device *hdev); 308fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémontstruct picolcd_pending *picolcd_send_and_wait(struct hid_device *hdev, 309fabdbf2fd22fa170b4c5340dbdda5c8cd88fb205Bruno Prémont int report_id, const u8 *raw_data, int size); 310