Commit b26a95d4 authored by Dmitry Torokhov's avatar Dmitry Torokhov

Merge branch 'next' into for-linus

Prepare second round of input updates for 4.5 merge window.
parents 009f7738 809d9516
...@@ -6,6 +6,7 @@ Required properties: ...@@ -6,6 +6,7 @@ Required properties:
Optional properties: Optional properties:
- autorepeat: Boolean, Enable auto repeat feature of Linux input - autorepeat: Boolean, Enable auto repeat feature of Linux input
subsystem. subsystem.
- label: String, name of the input device.
Each button (key) is represented as a sub-node of "gpio-keys": Each button (key) is represented as a sub-node of "gpio-keys":
Subnode properties: Subnode properties:
......
This diff is collapsed.
...@@ -630,7 +630,7 @@ gpio_keys_get_devtree_pdata(struct device *dev) ...@@ -630,7 +630,7 @@ gpio_keys_get_devtree_pdata(struct device *dev)
if (!node) if (!node)
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
nbuttons = of_get_child_count(node); nbuttons = of_get_available_child_count(node);
if (nbuttons == 0) if (nbuttons == 0)
return ERR_PTR(-ENODEV); return ERR_PTR(-ENODEV);
...@@ -645,8 +645,10 @@ gpio_keys_get_devtree_pdata(struct device *dev) ...@@ -645,8 +645,10 @@ gpio_keys_get_devtree_pdata(struct device *dev)
pdata->rep = !!of_get_property(node, "autorepeat", NULL); pdata->rep = !!of_get_property(node, "autorepeat", NULL);
of_property_read_string(node, "label", &pdata->name);
i = 0; i = 0;
for_each_child_of_node(node, pp) { for_each_available_child_of_node(node, pp) {
enum of_gpio_flags flags; enum of_gpio_flags flags;
button = &pdata->buttons[i++]; button = &pdata->buttons[i++];
......
...@@ -113,8 +113,8 @@ struct t7_config { ...@@ -113,8 +113,8 @@ struct t7_config {
#define MXT_T9_DETECT (1 << 7) #define MXT_T9_DETECT (1 << 7)
struct t9_range { struct t9_range {
u16 x; __le16 x;
u16 y; __le16 y;
} __packed; } __packed;
/* MXT_TOUCH_MULTI_T9 orient */ /* MXT_TOUCH_MULTI_T9 orient */
...@@ -216,6 +216,7 @@ struct mxt_data { ...@@ -216,6 +216,7 @@ struct mxt_data {
unsigned int irq; unsigned int irq;
unsigned int max_x; unsigned int max_x;
unsigned int max_y; unsigned int max_y;
bool xy_switch;
bool in_bootloader; bool in_bootloader;
u16 mem_size; u16 mem_size;
u8 t100_aux_ampl; u8 t100_aux_ampl;
...@@ -1665,8 +1666,8 @@ static int mxt_read_t9_resolution(struct mxt_data *data) ...@@ -1665,8 +1666,8 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
if (error) if (error)
return error; return error;
le16_to_cpus(&range.x); data->max_x = get_unaligned_le16(&range.x);
le16_to_cpus(&range.y); data->max_y = get_unaligned_le16(&range.y);
error = __mxt_read_reg(client, error = __mxt_read_reg(client,
object->start_address + MXT_T9_ORIENT, object->start_address + MXT_T9_ORIENT,
...@@ -1674,23 +1675,7 @@ static int mxt_read_t9_resolution(struct mxt_data *data) ...@@ -1674,23 +1675,7 @@ static int mxt_read_t9_resolution(struct mxt_data *data)
if (error) if (error)
return error; return error;
/* Handle default values */ data->xy_switch = orient & MXT_T9_ORIENT_SWITCH;
if (range.x == 0)
range.x = 1023;
if (range.y == 0)
range.y = 1023;
if (orient & MXT_T9_ORIENT_SWITCH) {
data->max_x = range.y;
data->max_y = range.x;
} else {
data->max_x = range.x;
data->max_y = range.y;
}
dev_dbg(&client->dev,
"Touchscreen size X%uY%u\n", data->max_x, data->max_y);
return 0; return 0;
} }
...@@ -1708,13 +1693,14 @@ static int mxt_read_t100_config(struct mxt_data *data) ...@@ -1708,13 +1693,14 @@ static int mxt_read_t100_config(struct mxt_data *data)
if (!object) if (!object)
return -EINVAL; return -EINVAL;
/* read touchscreen dimensions */
error = __mxt_read_reg(client, error = __mxt_read_reg(client,
object->start_address + MXT_T100_XRANGE, object->start_address + MXT_T100_XRANGE,
sizeof(range_x), &range_x); sizeof(range_x), &range_x);
if (error) if (error)
return error; return error;
le16_to_cpus(&range_x); data->max_x = get_unaligned_le16(&range_x);
error = __mxt_read_reg(client, error = __mxt_read_reg(client,
object->start_address + MXT_T100_YRANGE, object->start_address + MXT_T100_YRANGE,
...@@ -1722,36 +1708,24 @@ static int mxt_read_t100_config(struct mxt_data *data) ...@@ -1722,36 +1708,24 @@ static int mxt_read_t100_config(struct mxt_data *data)
if (error) if (error)
return error; return error;
le16_to_cpus(&range_y); data->max_y = get_unaligned_le16(&range_y);
/* read orientation config */
error = __mxt_read_reg(client, error = __mxt_read_reg(client,
object->start_address + MXT_T100_CFG1, object->start_address + MXT_T100_CFG1,
1, &cfg); 1, &cfg);
if (error) if (error)
return error; return error;
data->xy_switch = cfg & MXT_T100_CFG_SWITCHXY;
/* allocate aux bytes */
error = __mxt_read_reg(client, error = __mxt_read_reg(client,
object->start_address + MXT_T100_TCHAUX, object->start_address + MXT_T100_TCHAUX,
1, &tchaux); 1, &tchaux);
if (error) if (error)
return error; return error;
/* Handle default values */
if (range_x == 0)
range_x = 1023;
if (range_y == 0)
range_y = 1023;
if (cfg & MXT_T100_CFG_SWITCHXY) {
data->max_x = range_y;
data->max_y = range_x;
} else {
data->max_x = range_x;
data->max_y = range_y;
}
/* allocate aux bytes */
aux = 6; aux = 6;
if (tchaux & MXT_T100_TCHAUX_VECT) if (tchaux & MXT_T100_TCHAUX_VECT)
...@@ -1767,9 +1741,6 @@ static int mxt_read_t100_config(struct mxt_data *data) ...@@ -1767,9 +1741,6 @@ static int mxt_read_t100_config(struct mxt_data *data)
"T100 aux mappings vect:%u ampl:%u area:%u\n", "T100 aux mappings vect:%u ampl:%u area:%u\n",
data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area); data->t100_aux_vect, data->t100_aux_ampl, data->t100_aux_area);
dev_info(&client->dev,
"T100 Touchscreen size X%uY%u\n", data->max_x, data->max_y);
return 0; return 0;
} }
...@@ -1828,6 +1799,19 @@ static int mxt_initialize_input_device(struct mxt_data *data) ...@@ -1828,6 +1799,19 @@ static int mxt_initialize_input_device(struct mxt_data *data)
return -EINVAL; return -EINVAL;
} }
/* Handle default values and orientation switch */
if (data->max_x == 0)
data->max_x = 1023;
if (data->max_y == 0)
data->max_y = 1023;
if (data->xy_switch)
swap(data->max_x, data->max_y);
dev_info(dev, "Touchscreen size X%uY%u\n", data->max_x, data->max_y);
/* Register input device */
input_dev = input_allocate_device(); input_dev = input_allocate_device();
if (!input_dev) { if (!input_dev) {
dev_err(dev, "Failed to allocate memory\n"); dev_err(dev, "Failed to allocate memory\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment