23
23
#include <linux/delay.h>
24
24
#include <linux/firmware.h>
25
25
#include <linux/i2c.h>
26
- #include <linux/platform_data/atmel_mxt_ts.h>
27
26
#include <linux/input/mt.h>
28
27
#include <linux/interrupt.h>
29
28
#include <linux/of.h>
29
+ #include <linux/property.h>
30
30
#include <linux/slab.h>
31
31
#include <linux/gpio/consumer.h>
32
32
#include <linux/property.h>
@@ -269,12 +269,16 @@ static const struct v4l2_file_operations mxt_video_fops = {
269
269
.poll = vb2_fop_poll ,
270
270
};
271
271
272
+ enum mxt_suspend_mode {
273
+ MXT_SUSPEND_DEEP_SLEEP = 0 ,
274
+ MXT_SUSPEND_T9_CTRL = 1 ,
275
+ };
276
+
272
277
/* Each client has this additional data */
273
278
struct mxt_data {
274
279
struct i2c_client * client ;
275
280
struct input_dev * input_dev ;
276
281
char phys [64 ]; /* device physical location */
277
- const struct mxt_platform_data * pdata ;
278
282
struct mxt_object * object_table ;
279
283
struct mxt_info info ;
280
284
unsigned int irq ;
@@ -326,6 +330,9 @@ struct mxt_data {
326
330
/* for config update handling */
327
331
struct completion crc_completion ;
328
332
333
+ u32 * t19_keymap ;
334
+ unsigned int t19_num_keys ;
335
+
329
336
enum mxt_suspend_mode suspend_mode ;
330
337
};
331
338
@@ -745,23 +752,22 @@ static int mxt_write_object(struct mxt_data *data,
745
752
static void mxt_input_button (struct mxt_data * data , u8 * message )
746
753
{
747
754
struct input_dev * input = data -> input_dev ;
748
- const struct mxt_platform_data * pdata = data -> pdata ;
749
755
int i ;
750
756
751
- for (i = 0 ; i < pdata -> t19_num_keys ; i ++ ) {
752
- if (pdata -> t19_keymap [i ] == KEY_RESERVED )
757
+ for (i = 0 ; i < data -> t19_num_keys ; i ++ ) {
758
+ if (data -> t19_keymap [i ] == KEY_RESERVED )
753
759
continue ;
754
760
755
761
/* Active-low switch */
756
- input_report_key (input , pdata -> t19_keymap [i ],
762
+ input_report_key (input , data -> t19_keymap [i ],
757
763
!(message [1 ] & BIT (i )));
758
764
}
759
765
}
760
766
761
767
static void mxt_input_sync (struct mxt_data * data )
762
768
{
763
769
input_mt_report_pointer_emulation (data -> input_dev ,
764
- data -> pdata -> t19_num_keys );
770
+ data -> t19_num_keys );
765
771
input_sync (data -> input_dev );
766
772
}
767
773
@@ -1861,7 +1867,6 @@ static void mxt_input_close(struct input_dev *dev);
1861
1867
static void mxt_set_up_as_touchpad (struct input_dev * input_dev ,
1862
1868
struct mxt_data * data )
1863
1869
{
1864
- const struct mxt_platform_data * pdata = data -> pdata ;
1865
1870
int i ;
1866
1871
1867
1872
input_dev -> name = "Atmel maXTouch Touchpad" ;
@@ -1875,15 +1880,14 @@ static void mxt_set_up_as_touchpad(struct input_dev *input_dev,
1875
1880
input_abs_set_res (input_dev , ABS_MT_POSITION_Y ,
1876
1881
MXT_PIXELS_PER_MM );
1877
1882
1878
- for (i = 0 ; i < pdata -> t19_num_keys ; i ++ )
1879
- if (pdata -> t19_keymap [i ] != KEY_RESERVED )
1883
+ for (i = 0 ; i < data -> t19_num_keys ; i ++ )
1884
+ if (data -> t19_keymap [i ] != KEY_RESERVED )
1880
1885
input_set_capability (input_dev , EV_KEY ,
1881
- pdata -> t19_keymap [i ]);
1886
+ data -> t19_keymap [i ]);
1882
1887
}
1883
1888
1884
1889
static int mxt_initialize_input_device (struct mxt_data * data )
1885
1890
{
1886
- const struct mxt_platform_data * pdata = data -> pdata ;
1887
1891
struct device * dev = & data -> client -> dev ;
1888
1892
struct input_dev * input_dev ;
1889
1893
int error ;
@@ -1949,7 +1953,7 @@ static int mxt_initialize_input_device(struct mxt_data *data)
1949
1953
}
1950
1954
1951
1955
/* If device has buttons we assume it is a touchpad */
1952
- if (pdata -> t19_num_keys ) {
1956
+ if (data -> t19_num_keys ) {
1953
1957
mxt_set_up_as_touchpad (input_dev , data );
1954
1958
mt_flags |= INPUT_MT_POINTER ;
1955
1959
} else {
@@ -2923,51 +2927,42 @@ static void mxt_input_close(struct input_dev *dev)
2923
2927
mxt_stop (data );
2924
2928
}
2925
2929
2926
- static const struct mxt_platform_data *
2927
- mxt_parse_device_properties (struct i2c_client * client )
2930
+ static int mxt_parse_device_properties (struct mxt_data * data )
2928
2931
{
2929
2932
static const char keymap_property [] = "linux,gpio-keymap" ;
2930
- struct mxt_platform_data * pdata ;
2933
+ struct device * dev = & data -> client -> dev ;
2931
2934
u32 * keymap ;
2932
2935
int n_keys ;
2933
2936
int error ;
2934
2937
2935
- pdata = devm_kzalloc (& client -> dev , sizeof (* pdata ), GFP_KERNEL );
2936
- if (!pdata )
2937
- return ERR_PTR (- ENOMEM );
2938
-
2939
- if (device_property_present (& client -> dev , keymap_property )) {
2940
- n_keys = device_property_read_u32_array (& client -> dev ,
2941
- keymap_property ,
2938
+ if (device_property_present (dev , keymap_property )) {
2939
+ n_keys = device_property_read_u32_array (dev , keymap_property ,
2942
2940
NULL , 0 );
2943
2941
if (n_keys <= 0 ) {
2944
2942
error = n_keys < 0 ? n_keys : - EINVAL ;
2945
- dev_err (& client -> dev ,
2946
- "invalid/malformed '%s' property: %d\n" ,
2943
+ dev_err (dev , "invalid/malformed '%s' property: %d\n" ,
2947
2944
keymap_property , error );
2948
- return ERR_PTR ( error ) ;
2945
+ return error ;
2949
2946
}
2950
2947
2951
- keymap = devm_kmalloc_array (& client -> dev , n_keys , sizeof (u32 ),
2948
+ keymap = devm_kmalloc_array (dev , n_keys , sizeof (* keymap ),
2952
2949
GFP_KERNEL );
2953
2950
if (!keymap )
2954
- return ERR_PTR ( - ENOMEM ) ;
2951
+ return - ENOMEM ;
2955
2952
2956
- error = device_property_read_u32_array (& client -> dev ,
2957
- keymap_property ,
2953
+ error = device_property_read_u32_array (dev , keymap_property ,
2958
2954
keymap , n_keys );
2959
2955
if (error ) {
2960
- dev_err (& client -> dev ,
2961
- "failed to parse '%s' property: %d\n" ,
2956
+ dev_err (dev , "failed to parse '%s' property: %d\n" ,
2962
2957
keymap_property , error );
2963
- return ERR_PTR ( error ) ;
2958
+ return error ;
2964
2959
}
2965
2960
2966
- pdata -> t19_keymap = keymap ;
2967
- pdata -> t19_num_keys = n_keys ;
2961
+ data -> t19_keymap = keymap ;
2962
+ data -> t19_num_keys = n_keys ;
2968
2963
}
2969
2964
2970
- return pdata ;
2965
+ return 0 ;
2971
2966
}
2972
2967
2973
2968
#ifdef CONFIG_ACPI
@@ -3050,25 +3045,12 @@ static const struct dmi_system_id mxt_dmi_table[] = {
3050
3045
{ }
3051
3046
};
3052
3047
3053
- static int mxt_acpi_probe (struct i2c_client * client )
3048
+ static int mxt_prepare_acpi_properties (struct i2c_client * client )
3054
3049
{
3055
3050
struct acpi_device * adev ;
3056
3051
const struct dmi_system_id * system_id ;
3057
3052
const struct mxt_acpi_platform_data * acpi_pdata ;
3058
3053
3059
- /*
3060
- * Ignore ACPI devices representing bootloader mode.
3061
- *
3062
- * This is a bit of a hack: Google Chromebook BIOS creates ACPI
3063
- * devices for both application and bootloader modes, but we are
3064
- * interested in application mode only (if device is in bootloader
3065
- * mode we'll end up switching into application anyway). So far
3066
- * application mode addresses were all above 0x40, so we'll use it
3067
- * as a threshold.
3068
- */
3069
- if (client -> addr < 0x40 )
3070
- return - ENXIO ;
3071
-
3072
3054
adev = ACPI_COMPANION (& client -> dev );
3073
3055
if (!adev )
3074
3056
return - ENOENT ;
@@ -3104,24 +3086,12 @@ static int mxt_acpi_probe(struct i2c_client *client)
3104
3086
return 0 ;
3105
3087
}
3106
3088
#else
3107
- static int mxt_acpi_probe (struct i2c_client * client )
3089
+ static int mxt_prepare_acpi_properties (struct i2c_client * client )
3108
3090
{
3109
3091
return - ENOENT ;
3110
3092
}
3111
3093
#endif
3112
3094
3113
- static const struct mxt_platform_data *
3114
- mxt_get_platform_data (struct i2c_client * client )
3115
- {
3116
- const struct mxt_platform_data * pdata ;
3117
-
3118
- pdata = dev_get_platdata (& client -> dev );
3119
- if (pdata )
3120
- return pdata ;
3121
-
3122
- return mxt_parse_device_properties (client );
3123
- }
3124
-
3125
3095
static const struct dmi_system_id chromebook_T9_suspend_dmi [] = {
3126
3096
{
3127
3097
.matches = {
@@ -3140,16 +3110,20 @@ static const struct dmi_system_id chromebook_T9_suspend_dmi[] = {
3140
3110
static int mxt_probe (struct i2c_client * client , const struct i2c_device_id * id )
3141
3111
{
3142
3112
struct mxt_data * data ;
3143
- const struct mxt_platform_data * pdata ;
3144
3113
int error ;
3145
3114
3146
- error = mxt_acpi_probe (client );
3147
- if (error && error != - ENOENT )
3148
- return error ;
3149
-
3150
- pdata = mxt_get_platform_data (client );
3151
- if (IS_ERR (pdata ))
3152
- return PTR_ERR (pdata );
3115
+ /*
3116
+ * Ignore ACPI devices representing bootloader mode.
3117
+ *
3118
+ * This is a bit of a hack: Google Chromebook BIOS creates ACPI
3119
+ * devices for both application and bootloader modes, but we are
3120
+ * interested in application mode only (if device is in bootloader
3121
+ * mode we'll end up switching into application anyway). So far
3122
+ * application mode addresses were all above 0x40, so we'll use it
3123
+ * as a threshold.
3124
+ */
3125
+ if (ACPI_COMPANION (& client -> dev ) && client -> addr < 0x40 )
3126
+ return - ENXIO ;
3153
3127
3154
3128
data = devm_kzalloc (& client -> dev , sizeof (struct mxt_data ), GFP_KERNEL );
3155
3129
if (!data )
@@ -3159,7 +3133,6 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
3159
3133
client -> adapter -> nr , client -> addr );
3160
3134
3161
3135
data -> client = client ;
3162
- data -> pdata = pdata ;
3163
3136
data -> irq = client -> irq ;
3164
3137
i2c_set_clientdata (client , data );
3165
3138
@@ -3170,6 +3143,14 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
3170
3143
data -> suspend_mode = dmi_check_system (chromebook_T9_suspend_dmi ) ?
3171
3144
MXT_SUSPEND_T9_CTRL : MXT_SUSPEND_DEEP_SLEEP ;
3172
3145
3146
+ error = mxt_prepare_acpi_properties (client );
3147
+ if (error && error != - ENOENT )
3148
+ return error ;
3149
+
3150
+ error = mxt_parse_device_properties (data );
3151
+ if (error )
3152
+ return error ;
3153
+
3173
3154
data -> reset_gpio = devm_gpiod_get_optional (& client -> dev ,
3174
3155
"reset" , GPIOD_OUT_LOW );
3175
3156
if (IS_ERR (data -> reset_gpio )) {
@@ -3179,8 +3160,7 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
3179
3160
}
3180
3161
3181
3162
error = devm_request_threaded_irq (& client -> dev , client -> irq ,
3182
- NULL , mxt_interrupt ,
3183
- pdata -> irqflags | IRQF_ONESHOT ,
3163
+ NULL , mxt_interrupt , IRQF_ONESHOT ,
3184
3164
client -> name , data );
3185
3165
if (error ) {
3186
3166
dev_err (& client -> dev , "Failed to register interrupt\n" );
@@ -3300,7 +3280,7 @@ MODULE_DEVICE_TABLE(i2c, mxt_id);
3300
3280
static struct i2c_driver mxt_driver = {
3301
3281
.driver = {
3302
3282
.name = "atmel_mxt_ts" ,
3303
- .of_match_table = of_match_ptr ( mxt_of_match ) ,
3283
+ .of_match_table = mxt_of_match ,
3304
3284
.acpi_match_table = ACPI_PTR (mxt_acpi_id ),
3305
3285
.pm = & mxt_pm_ops ,
3306
3286
},
0 commit comments