1ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell/* linux/spi/ads7846.h */ 2ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell 3ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell/* Touchscreen characteristics vary between boards and models. The 42e5a7bd978bf4118a0c8edf2e6ff81d0a72fee47David Brownell * platform_data for the device's "struct device" holds this information. 5ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell * 6ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell * It's OK if the min/max values are zero. 7ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell */ 8da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deakenum ads7846_filter { 9da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak ADS7846_FILTER_OK, 10da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak ADS7846_FILTER_REPEAT, 11da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak ADS7846_FILTER_IGNORE, 12da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak}; 13da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak 14ffa458c1bd9b6f653008d450f337602f3d52a646David Brownellstruct ads7846_platform_data { 1506a09124b5ec65f81df66c56695d9a9ae04a0114Michael Hennerich u16 model; /* 7843, 7845, 7846, 7873. */ 16ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell u16 vref_delay_usecs; /* 0 for external vref; etc */ 17ebcaaad9d5e8fd284b8dcf25a24999420f0f56d8Alexander Stein u16 vref_mv; /* external vref value, milliVolts 18ebcaaad9d5e8fd284b8dcf25a24999420f0f56d8Alexander Stein * ads7846: if 0, use internal vref */ 197c6d0ee14cb7a4cfad4864dc196256da5749bc0cDavid Brownell bool keep_vref_on; /* set to keep vref on for differential 20de2defd96d7d92fe8b5f9cf2bfd385d8d4819923Imre Deak * measurements as well */ 2186579a4cccf18a2ddbf7de8fc5a0f5d9b94ed76dMichael Roth bool swap_xy; /* swap x and y axes */ 22e4f48861993294c27849076741eb0c090482560bSemih Hazar 23e4f48861993294c27849076741eb0c090482560bSemih Hazar /* Settling time of the analog signals; a function of Vcc and the 24e4f48861993294c27849076741eb0c090482560bSemih Hazar * capacitance on the X/Y drivers. If set to non-zero, two samples 25e4f48861993294c27849076741eb0c090482560bSemih Hazar * are taken with settle_delay us apart, and the second one is used. 26e4f48861993294c27849076741eb0c090482560bSemih Hazar * ~150 uSec with 0.01uF caps. 27e4f48861993294c27849076741eb0c090482560bSemih Hazar */ 28e4f48861993294c27849076741eb0c090482560bSemih Hazar u16 settle_delay_usecs; 29e4f48861993294c27849076741eb0c090482560bSemih Hazar 301d25891f3241103d14ea78236504474a138b8adaSemih Hazar /* If set to non-zero, after samples are taken this delay is applied 311d25891f3241103d14ea78236504474a138b8adaSemih Hazar * and penirq is rechecked, to help avoid false events. This value 321d25891f3241103d14ea78236504474a138b8adaSemih Hazar * is affected by the material used to build the touch layer. 331d25891f3241103d14ea78236504474a138b8adaSemih Hazar */ 341d25891f3241103d14ea78236504474a138b8adaSemih Hazar u16 penirq_recheck_delay_usecs; 351d25891f3241103d14ea78236504474a138b8adaSemih Hazar 36ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell u16 x_plate_ohms; 37ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell u16 y_plate_ohms; 38ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell 39ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell u16 x_min, x_max; 40ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell u16 y_min, y_max; 41ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell u16 pressure_min, pressure_max; 420b7018aae7e1798f55f736b9a77c201708aa0e33Imre Deak 43d5b415c95f0e6510451f1446cea832c1f77bd7eaImre Deak u16 debounce_max; /* max number of additional readings 44d5b415c95f0e6510451f1446cea832c1f77bd7eaImre Deak * per sample */ 450b7018aae7e1798f55f736b9a77c201708aa0e33Imre Deak u16 debounce_tol; /* tolerance used for filtering */ 46d5b415c95f0e6510451f1446cea832c1f77bd7eaImre Deak u16 debounce_rep; /* additional consecutive good readings 47d5b415c95f0e6510451f1446cea832c1f77bd7eaImre Deak * required after the first two */ 486ae19b04ab41a4db0f0c48ec0b78950f6b028823Eric Miao int gpio_pendown; /* the GPIO used to decide the pendown 49c4f4925439f13a243aecfb36c693613603c0bfbdIgor Grinberg * state if get_pendown_state == NULL */ 50c4f4925439f13a243aecfb36c693613603c0bfbdIgor Grinberg int gpio_pendown_debounce; /* platform specific debounce time for 51c4f4925439f13a243aecfb36c693613603c0bfbdIgor Grinberg * the gpio_pendown */ 52c9e617a563ad646239270fa2222cdb06966cf1faImre Deak int (*get_pendown_state)(void); 530f622bf465e78c390e13c5f4a14d0b3f8fb7c7e5Dmitry Torokhov int (*filter_init) (const struct ads7846_platform_data *pdata, 54da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak void **filter_data); 55da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak int (*filter) (void *filter_data, int data_idx, int *val); 56da970e69efb9fd0be0c23ace5bde42d4caf17b40Imre Deak void (*filter_cleanup)(void *filter_data); 57fd746d540abf8c686f5f868ae62112692e684088Eric Miao void (*wait_for_sync)(void); 58fdba2bb1f2eed85085a0fe154e1acb82de3239f7Ranjith Lohithakshan bool wakeup; 597804302b14032d357d889e4a23e463eb6a6c5136Anatolij Gustschin unsigned long irq_flags; 60ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell}; 61ffa458c1bd9b6f653008d450f337602f3d52a646David Brownell 62