#include <linux/leds.h>
#include <linux/i2c/lm8323.h>
-#include <asm/mach-types.h>
-#include <asm/mach/irq.h>
-
/* Commands to send to the chip. */
#define LM8323_CMD_READ_ID 0x80 /* Read chip ID. */
#define LM8323_CMD_WRITE_CFG 0x81 /* Set configuration item. */
/* Send trigger. Argument is same as PWM_WAIT_TRIG. */
#define PWM_SEND_TRIG(chans) (0xe000 | ((chans) & 0x7))
-#define DRIVER_NAME "lm8323"
-
struct lm8323_pwm {
int id;
int enabled;
static DEVICE_ATTR(disable_kp, 0644, lm8323_show_disable, lm8323_set_disable);
static int lm8323_probe(struct i2c_client *client,
- const struct i2c_device_id *id)
+ const struct i2c_device_id *id)
{
struct lm8323_platform_data *pdata;
struct input_dev *idev;
i2c_set_clientdata(client, lm);
lm->client = client;
pdata = client->dev.platform_data;
- if (!pdata)
- return -EINVAL; /* ? */
+ if (!pdata || !pdata->size_x || !pdata->size_y) {
+ dev_err(&client->dev, "missing platform_data\n");
+ err = -EINVAL;
+ goto fail2;
+ }
lm->size_x = pdata->size_x;
- if (lm->size_x == 0) {
- lm->size_x = 8;
- } else if (lm->size_x > 8) {
+ if (lm->size_x > 8) {
dev_err(&client->dev, "invalid x size %d specified\n",
lm->size_x);
- lm->size_x = 8;
+ err = -EINVAL;
+ goto fail2;
}
lm->size_y = pdata->size_y;
- if (lm->size_y == 0) {
- lm->size_y = 12;
- } else if (lm->size_y > 12) {
+ if (lm->size_y > 12) {
dev_err(&client->dev, "invalid y size %d specified\n",
lm->size_y);
- lm->size_x = 12;
+ err = -EINVAL;
+ goto fail2;
}
dev_vdbg(&client->dev, "Keypad size: %d x %d\n", lm->size_x, lm->size_y);
lm->debounce_time = pdata->debounce_time;
- if (lm->debounce_time == 0) /* Default. */
- lm->debounce_time = 12;
- else if (lm->debounce_time == -1) /* Disable debounce. */
- lm->debounce_time = 0;
-
lm->active_time = pdata->active_time;
- if (lm->active_time == 0) /* Default. */
- lm->active_time = 500;
- else if (lm->active_time == -1) /* Disable sleep. */
- lm->active_time = 0;
lm8323_reset(lm);
err = request_irq(client->irq, lm8323_irq,
IRQF_TRIGGER_FALLING | IRQF_DISABLED |
- IRQF_SAMPLE_RANDOM, DRIVER_NAME, lm);
+ IRQF_SAMPLE_RANDOM, "lm8323", lm);
if (err) {
dev_err(&client->dev, "could not get IRQ %d\n", client->irq);
goto fail6;
goto fail7;
idev = input_allocate_device();
- if (idev == NULL) {
+ if (!idev) {
err = -ENOMEM;
goto fail8;
}
}
static const struct i2c_device_id lm8323_id[] = {
- { DRIVER_NAME, 0 },
+ { "lm8323", 0 },
{ }
};
static struct i2c_driver lm8323_i2c_driver = {
.driver = {
- .name = DRIVER_NAME,
+ .name = "lm8323",
},
.probe = lm8323_probe,
- .remove = __devexit_p(lm8323_remove),
+ .remove = lm8323_remove,
.suspend = lm8323_suspend,
.resume = lm8323_resume,
.id_table = lm8323_id,
{
return i2c_add_driver(&lm8323_i2c_driver);
}
+module_init(lm8323_init);
static void __exit lm8323_exit(void)
{
i2c_del_driver(&lm8323_i2c_driver);
}
+module_exit(lm8323_exit);
MODULE_AUTHOR("Timo O. Karjalainen <timo.o.karjalainen@nokia.com>, Daniel Stone");
MODULE_DESCRIPTION("LM8323 keypad driver");
MODULE_LICENSE("GPL");
-module_init(lm8323_init);
-module_exit(lm8323_exit);