Message ID | 1349170427-1625-1-git-send-email-t.figa@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, Tomasz. On 10/02/2012 06:33 PM, Tomasz Figa wrote: > This patch adds device tree bindings for mms114 touchscreen. > > Signed-off-by: Tomasz Figa <t.figa@samsung.com> > > --- > .../bindings/input/touchscreen/mms114.txt | 34 ++++++++++++++ > drivers/input/touchscreen/mms114.c | 52 +++++++++++++++++++++- > 2 files changed, 84 insertions(+), 2 deletions(-) > create mode 100644 Documentation/devicetree/bindings/input/touchscreen/mms114.txt > > diff --git a/Documentation/devicetree/bindings/input/touchscreen/mms114.txt b/Documentation/devicetree/bindings/input/touchscreen/mms114.txt > new file mode 100644 > index 0000000..f89d382 > --- /dev/null > +++ b/Documentation/devicetree/bindings/input/touchscreen/mms114.txt > @@ -0,0 +1,34 @@ > +* MELFAS MMS114 touchscreen controller > + > +Required properties: > +- compatible: must be "melfas,mms114" > +- reg: I2C address of the chip > +- interrupts: interrupt to which the chip is connected > +- x-size: horizontal resolution of touchscreen > +- y-size: vertical resolution of touchscreen > + > +Optional properties: > +- contact-threshold: > +- moving-threshold: > +- x-invert: invert X axis > +- y-invert: invert Y axis > + > +Example: > + > + i2c@00000000 { > + /* ... */ > + > + touchscreen@48 { > + compatible = "melfas,mms114"; > + reg = <0x48>; > + interrupts = <39 0>; > + x-size = <720>; > + y-size = <1280>; > + contact-threshold = <10>; > + moving-threshold = <10>; > + x-invert; > + y-invert; > + }; > + > + /* ... */ > + }; > diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c > index 49c44bb..fb66f7a 100644 > --- a/drivers/input/touchscreen/mms114.c > +++ b/drivers/input/touchscreen/mms114.c > @@ -10,6 +10,7 @@ > #include <linux/module.h> > #include <linux/init.h> > #include <linux/delay.h> > +#include <linux/of.h> > #include <linux/i2c.h> > #include <linux/i2c/mms114.h> > #include <linux/input/mt.h> > @@ -360,14 +361,55 @@ static void mms114_input_close(struct input_dev *dev) > mms114_stop(data); > } > > +static struct mms114_platform_data *mms114_parse_dt(struct device *dev) > +{ > + struct mms114_platform_data *pdata; > + struct device_node *np = dev->of_node; > + > + if (!np) > + return NULL; > + > + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); > + if (!pdata) { > + dev_err(dev, "failed to allocate platform data\n"); > + return NULL; > + } > + > + if (of_property_read_u32(np, "x-size", &pdata->x_size)) { > + dev_err(dev, "failed to get x-size property\n"); > + return NULL; > + }; > + > + if (of_property_read_u32(np, "y-size", &pdata->y_size)) { > + dev_err(dev, "failed to get y-size property\n"); > + return NULL; > + }; > + > + of_property_read_u32(np, "contact-threshold", > + &pdata->contact_threshold); > + of_property_read_u32(np, "moving-threshold", > + &pdata->moving_threshold); > + > + if (of_find_property(np, "x-invert", NULL)) > + pdata->x_invert = true; > + if (of_find_property(np, "y-invert", NULL)) > + pdata->y_invert = true; > + > + return pdata; > +} #ifdef CONFIG_OF needs. > + > static int __devinit mms114_probe(struct i2c_client *client, > const struct i2c_device_id *id) > { > struct mms114_data *data; > struct input_dev *input_dev; > + struct mms114_platform_data *pdata = client->dev.platform_data; > int error; > > - if (!client->dev.platform_data) { > + if (!pdata) > + pdata = mms114_parse_dt(&client->dev); > + > + if (!pdata) { > dev_err(&client->dev, "Need platform data\n"); > return -EINVAL; > } > @@ -389,7 +431,7 @@ static int __devinit mms114_probe(struct i2c_client *client, > > data->client = client; > data->input_dev = input_dev; > - data->pdata = client->dev.platform_data; > + data->pdata = pdata; > > input_dev->name = "MELPAS MMS114 Touchscreen"; > input_dev->id.bustype = BUS_I2C; > @@ -525,11 +567,17 @@ static const struct i2c_device_id mms114_id[] = { > }; > MODULE_DEVICE_TABLE(i2c, mms114_id); > > +static struct of_device_id __devinitdata mms114_dt_match[] = { > + { .compatible = "melfas,mms114" }, > + { } > +}; > + > static struct i2c_driver mms114_driver = { > .driver = { > .name = "mms114", > .owner = THIS_MODULE, > .pm = &mms114_pm_ops, > + .of_match_table = mms114_dt_match, > }, > .probe = mms114_probe, > .remove = __devexit_p(mms114_remove), -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/devicetree/bindings/input/touchscreen/mms114.txt b/Documentation/devicetree/bindings/input/touchscreen/mms114.txt new file mode 100644 index 0000000..f89d382 --- /dev/null +++ b/Documentation/devicetree/bindings/input/touchscreen/mms114.txt @@ -0,0 +1,34 @@ +* MELFAS MMS114 touchscreen controller + +Required properties: +- compatible: must be "melfas,mms114" +- reg: I2C address of the chip +- interrupts: interrupt to which the chip is connected +- x-size: horizontal resolution of touchscreen +- y-size: vertical resolution of touchscreen + +Optional properties: +- contact-threshold: +- moving-threshold: +- x-invert: invert X axis +- y-invert: invert Y axis + +Example: + + i2c@00000000 { + /* ... */ + + touchscreen@48 { + compatible = "melfas,mms114"; + reg = <0x48>; + interrupts = <39 0>; + x-size = <720>; + y-size = <1280>; + contact-threshold = <10>; + moving-threshold = <10>; + x-invert; + y-invert; + }; + + /* ... */ + }; diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c index 49c44bb..fb66f7a 100644 --- a/drivers/input/touchscreen/mms114.c +++ b/drivers/input/touchscreen/mms114.c @@ -10,6 +10,7 @@ #include <linux/module.h> #include <linux/init.h> #include <linux/delay.h> +#include <linux/of.h> #include <linux/i2c.h> #include <linux/i2c/mms114.h> #include <linux/input/mt.h> @@ -360,14 +361,55 @@ static void mms114_input_close(struct input_dev *dev) mms114_stop(data); } +static struct mms114_platform_data *mms114_parse_dt(struct device *dev) +{ + struct mms114_platform_data *pdata; + struct device_node *np = dev->of_node; + + if (!np) + return NULL; + + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) { + dev_err(dev, "failed to allocate platform data\n"); + return NULL; + } + + if (of_property_read_u32(np, "x-size", &pdata->x_size)) { + dev_err(dev, "failed to get x-size property\n"); + return NULL; + }; + + if (of_property_read_u32(np, "y-size", &pdata->y_size)) { + dev_err(dev, "failed to get y-size property\n"); + return NULL; + }; + + of_property_read_u32(np, "contact-threshold", + &pdata->contact_threshold); + of_property_read_u32(np, "moving-threshold", + &pdata->moving_threshold); + + if (of_find_property(np, "x-invert", NULL)) + pdata->x_invert = true; + if (of_find_property(np, "y-invert", NULL)) + pdata->y_invert = true; + + return pdata; +} + static int __devinit mms114_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct mms114_data *data; struct input_dev *input_dev; + struct mms114_platform_data *pdata = client->dev.platform_data; int error; - if (!client->dev.platform_data) { + if (!pdata) + pdata = mms114_parse_dt(&client->dev); + + if (!pdata) { dev_err(&client->dev, "Need platform data\n"); return -EINVAL; } @@ -389,7 +431,7 @@ static int __devinit mms114_probe(struct i2c_client *client, data->client = client; data->input_dev = input_dev; - data->pdata = client->dev.platform_data; + data->pdata = pdata; input_dev->name = "MELPAS MMS114 Touchscreen"; input_dev->id.bustype = BUS_I2C; @@ -525,11 +567,17 @@ static const struct i2c_device_id mms114_id[] = { }; MODULE_DEVICE_TABLE(i2c, mms114_id); +static struct of_device_id __devinitdata mms114_dt_match[] = { + { .compatible = "melfas,mms114" }, + { } +}; + static struct i2c_driver mms114_driver = { .driver = { .name = "mms114", .owner = THIS_MODULE, .pm = &mms114_pm_ops, + .of_match_table = mms114_dt_match, }, .probe = mms114_probe, .remove = __devexit_p(mms114_remove),
This patch adds device tree bindings for mms114 touchscreen. Signed-off-by: Tomasz Figa <t.figa@samsung.com> --- .../bindings/input/touchscreen/mms114.txt | 34 ++++++++++++++ drivers/input/touchscreen/mms114.c | 52 +++++++++++++++++++++- 2 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 Documentation/devicetree/bindings/input/touchscreen/mms114.txt