xref: /openbmc/linux/drivers/gpio/gpio-max732x.c (revision 615c36f5)
1 /*
2  *  MAX732x I2C Port Expander with 8/16 I/O
3  *
4  *  Copyright (C) 2007 Marvell International Ltd.
5  *  Copyright (C) 2008 Jack Ren <jack.ren@marvell.com>
6  *  Copyright (C) 2008 Eric Miao <eric.miao@marvell.com>
7  *
8  *  Derived from drivers/gpio/pca953x.c
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; version 2 of the License.
13  */
14 
15 #include <linux/module.h>
16 #include <linux/init.h>
17 #include <linux/slab.h>
18 #include <linux/string.h>
19 #include <linux/gpio.h>
20 #include <linux/interrupt.h>
21 #include <linux/irq.h>
22 #include <linux/i2c.h>
23 #include <linux/i2c/max732x.h>
24 
25 
26 /*
27  * Each port of MAX732x (including MAX7319) falls into one of the
28  * following three types:
29  *
30  *   - Push Pull Output
31  *   - Input
32  *   - Open Drain I/O
33  *
34  * designated by 'O', 'I' and 'P' individually according to MAXIM's
35  * datasheets. 'I' and 'P' ports are interrupt capables, some with
36  * a dedicated interrupt mask.
37  *
38  * There are two groups of I/O ports, each group usually includes
39  * up to 8 I/O ports, and is accessed by a specific I2C address:
40  *
41  *   - Group A : by I2C address 0b'110xxxx
42  *   - Group B : by I2C address 0b'101xxxx
43  *
44  * where 'xxxx' is decided by the connections of pin AD2/AD0.  The
45  * address used also affects the initial state of output signals.
46  *
47  * Within each group of ports, there are five known combinations of
48  * I/O ports: 4I4O, 4P4O, 8I, 8P, 8O, see the definitions below for
49  * the detailed organization of these ports. Only Goup A is interrupt
50  * capable.
51  *
52  * GPIO numbers start from 'gpio_base + 0' to 'gpio_base + 8/16',
53  * and GPIOs from GROUP_A are numbered before those from GROUP_B
54  * (if there are two groups).
55  *
56  * NOTE: MAX7328/MAX7329 are drop-in replacements for PCF8574/a, so
57  * they are not supported by this driver.
58  */
59 
60 #define PORT_NONE	0x0	/* '/' No Port */
61 #define PORT_OUTPUT	0x1	/* 'O' Push-Pull, Output Only */
62 #define PORT_INPUT	0x2	/* 'I' Input Only */
63 #define PORT_OPENDRAIN	0x3	/* 'P' Open-Drain, I/O */
64 
65 #define IO_4I4O		0x5AA5	/* O7 O6 I5 I4 I3 I2 O1 O0 */
66 #define IO_4P4O		0x5FF5	/* O7 O6 P5 P4 P3 P2 O1 O0 */
67 #define IO_8I		0xAAAA	/* I7 I6 I5 I4 I3 I2 I1 I0 */
68 #define IO_8P		0xFFFF	/* P7 P6 P5 P4 P3 P2 P1 P0 */
69 #define IO_8O		0x5555	/* O7 O6 O5 O4 O3 O2 O1 O0 */
70 
71 #define GROUP_A(x)	((x) & 0xffff)	/* I2C Addr: 0b'110xxxx */
72 #define GROUP_B(x)	((x) << 16)	/* I2C Addr: 0b'101xxxx */
73 
74 #define INT_NONE	0x0	/* No interrupt capability */
75 #define INT_NO_MASK	0x1	/* Has interrupts, no mask */
76 #define INT_INDEP_MASK	0x2	/* Has interrupts, independent mask */
77 #define INT_MERGED_MASK 0x3	/* Has interrupts, merged mask */
78 
79 #define INT_CAPS(x)	(((uint64_t)(x)) << 32)
80 
81 enum {
82 	MAX7319,
83 	MAX7320,
84 	MAX7321,
85 	MAX7322,
86 	MAX7323,
87 	MAX7324,
88 	MAX7325,
89 	MAX7326,
90 	MAX7327,
91 };
92 
93 static uint64_t max732x_features[] = {
94 	[MAX7319] = GROUP_A(IO_8I) | INT_CAPS(INT_MERGED_MASK),
95 	[MAX7320] = GROUP_B(IO_8O),
96 	[MAX7321] = GROUP_A(IO_8P) | INT_CAPS(INT_NO_MASK),
97 	[MAX7322] = GROUP_A(IO_4I4O) | INT_CAPS(INT_MERGED_MASK),
98 	[MAX7323] = GROUP_A(IO_4P4O) | INT_CAPS(INT_INDEP_MASK),
99 	[MAX7324] = GROUP_A(IO_8I) | GROUP_B(IO_8O) | INT_CAPS(INT_MERGED_MASK),
100 	[MAX7325] = GROUP_A(IO_8P) | GROUP_B(IO_8O) | INT_CAPS(INT_NO_MASK),
101 	[MAX7326] = GROUP_A(IO_4I4O) | GROUP_B(IO_8O) | INT_CAPS(INT_MERGED_MASK),
102 	[MAX7327] = GROUP_A(IO_4P4O) | GROUP_B(IO_8O) | INT_CAPS(INT_NO_MASK),
103 };
104 
105 static const struct i2c_device_id max732x_id[] = {
106 	{ "max7319", MAX7319 },
107 	{ "max7320", MAX7320 },
108 	{ "max7321", MAX7321 },
109 	{ "max7322", MAX7322 },
110 	{ "max7323", MAX7323 },
111 	{ "max7324", MAX7324 },
112 	{ "max7325", MAX7325 },
113 	{ "max7326", MAX7326 },
114 	{ "max7327", MAX7327 },
115 	{ },
116 };
117 MODULE_DEVICE_TABLE(i2c, max732x_id);
118 
119 struct max732x_chip {
120 	struct gpio_chip gpio_chip;
121 
122 	struct i2c_client *client;	/* "main" client */
123 	struct i2c_client *client_dummy;
124 	struct i2c_client *client_group_a;
125 	struct i2c_client *client_group_b;
126 
127 	unsigned int	mask_group_a;
128 	unsigned int	dir_input;
129 	unsigned int	dir_output;
130 
131 	struct mutex	lock;
132 	uint8_t		reg_out[2];
133 
134 #ifdef CONFIG_GPIO_MAX732X_IRQ
135 	struct mutex	irq_lock;
136 	int		irq_base;
137 	uint8_t		irq_mask;
138 	uint8_t		irq_mask_cur;
139 	uint8_t		irq_trig_raise;
140 	uint8_t		irq_trig_fall;
141 	uint8_t		irq_features;
142 #endif
143 };
144 
145 static int max732x_writeb(struct max732x_chip *chip, int group_a, uint8_t val)
146 {
147 	struct i2c_client *client;
148 	int ret;
149 
150 	client = group_a ? chip->client_group_a : chip->client_group_b;
151 	ret = i2c_smbus_write_byte(client, val);
152 	if (ret < 0) {
153 		dev_err(&client->dev, "failed writing\n");
154 		return ret;
155 	}
156 
157 	return 0;
158 }
159 
160 static int max732x_readb(struct max732x_chip *chip, int group_a, uint8_t *val)
161 {
162 	struct i2c_client *client;
163 	int ret;
164 
165 	client = group_a ? chip->client_group_a : chip->client_group_b;
166 	ret = i2c_smbus_read_byte(client);
167 	if (ret < 0) {
168 		dev_err(&client->dev, "failed reading\n");
169 		return ret;
170 	}
171 
172 	*val = (uint8_t)ret;
173 	return 0;
174 }
175 
176 static inline int is_group_a(struct max732x_chip *chip, unsigned off)
177 {
178 	return (1u << off) & chip->mask_group_a;
179 }
180 
181 static int max732x_gpio_get_value(struct gpio_chip *gc, unsigned off)
182 {
183 	struct max732x_chip *chip;
184 	uint8_t reg_val;
185 	int ret;
186 
187 	chip = container_of(gc, struct max732x_chip, gpio_chip);
188 
189 	ret = max732x_readb(chip, is_group_a(chip, off), &reg_val);
190 	if (ret < 0)
191 		return 0;
192 
193 	return reg_val & (1u << (off & 0x7));
194 }
195 
196 static void max732x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
197 {
198 	struct max732x_chip *chip;
199 	uint8_t reg_out, mask = 1u << (off & 0x7);
200 	int ret;
201 
202 	chip = container_of(gc, struct max732x_chip, gpio_chip);
203 
204 	mutex_lock(&chip->lock);
205 
206 	reg_out = (off > 7) ? chip->reg_out[1] : chip->reg_out[0];
207 	reg_out = (val) ? reg_out | mask : reg_out & ~mask;
208 
209 	ret = max732x_writeb(chip, is_group_a(chip, off), reg_out);
210 	if (ret < 0)
211 		goto out;
212 
213 	/* update the shadow register then */
214 	if (off > 7)
215 		chip->reg_out[1] = reg_out;
216 	else
217 		chip->reg_out[0] = reg_out;
218 out:
219 	mutex_unlock(&chip->lock);
220 }
221 
222 static int max732x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
223 {
224 	struct max732x_chip *chip;
225 	unsigned int mask = 1u << off;
226 
227 	chip = container_of(gc, struct max732x_chip, gpio_chip);
228 
229 	if ((mask & chip->dir_input) == 0) {
230 		dev_dbg(&chip->client->dev, "%s port %d is output only\n",
231 			chip->client->name, off);
232 		return -EACCES;
233 	}
234 
235 	/*
236 	 * Open-drain pins must be set to high impedance (which is
237 	 * equivalent to output-high) to be turned into an input.
238 	 */
239 	if ((mask & chip->dir_output))
240 		max732x_gpio_set_value(gc, off, 1);
241 
242 	return 0;
243 }
244 
245 static int max732x_gpio_direction_output(struct gpio_chip *gc,
246 		unsigned off, int val)
247 {
248 	struct max732x_chip *chip;
249 	unsigned int mask = 1u << off;
250 
251 	chip = container_of(gc, struct max732x_chip, gpio_chip);
252 
253 	if ((mask & chip->dir_output) == 0) {
254 		dev_dbg(&chip->client->dev, "%s port %d is input only\n",
255 			chip->client->name, off);
256 		return -EACCES;
257 	}
258 
259 	max732x_gpio_set_value(gc, off, val);
260 	return 0;
261 }
262 
263 #ifdef CONFIG_GPIO_MAX732X_IRQ
264 static int max732x_writew(struct max732x_chip *chip, uint16_t val)
265 {
266 	int ret;
267 
268 	val = cpu_to_le16(val);
269 
270 	ret = i2c_master_send(chip->client_group_a, (char *)&val, 2);
271 	if (ret < 0) {
272 		dev_err(&chip->client_group_a->dev, "failed writing\n");
273 		return ret;
274 	}
275 
276 	return 0;
277 }
278 
279 static int max732x_readw(struct max732x_chip *chip, uint16_t *val)
280 {
281 	int ret;
282 
283 	ret = i2c_master_recv(chip->client_group_a, (char *)val, 2);
284 	if (ret < 0) {
285 		dev_err(&chip->client_group_a->dev, "failed reading\n");
286 		return ret;
287 	}
288 
289 	*val = le16_to_cpu(*val);
290 	return 0;
291 }
292 
293 static void max732x_irq_update_mask(struct max732x_chip *chip)
294 {
295 	uint16_t msg;
296 
297 	if (chip->irq_mask == chip->irq_mask_cur)
298 		return;
299 
300 	chip->irq_mask = chip->irq_mask_cur;
301 
302 	if (chip->irq_features == INT_NO_MASK)
303 		return;
304 
305 	mutex_lock(&chip->lock);
306 
307 	switch (chip->irq_features) {
308 	case INT_INDEP_MASK:
309 		msg = (chip->irq_mask << 8) | chip->reg_out[0];
310 		max732x_writew(chip, msg);
311 		break;
312 
313 	case INT_MERGED_MASK:
314 		msg = chip->irq_mask | chip->reg_out[0];
315 		max732x_writeb(chip, 1, (uint8_t)msg);
316 		break;
317 	}
318 
319 	mutex_unlock(&chip->lock);
320 }
321 
322 static int max732x_gpio_to_irq(struct gpio_chip *gc, unsigned off)
323 {
324 	struct max732x_chip *chip;
325 
326 	chip = container_of(gc, struct max732x_chip, gpio_chip);
327 	return chip->irq_base + off;
328 }
329 
330 static void max732x_irq_mask(struct irq_data *d)
331 {
332 	struct max732x_chip *chip = irq_data_get_irq_chip_data(d);
333 
334 	chip->irq_mask_cur &= ~(1 << (d->irq - chip->irq_base));
335 }
336 
337 static void max732x_irq_unmask(struct irq_data *d)
338 {
339 	struct max732x_chip *chip = irq_data_get_irq_chip_data(d);
340 
341 	chip->irq_mask_cur |= 1 << (d->irq - chip->irq_base);
342 }
343 
344 static void max732x_irq_bus_lock(struct irq_data *d)
345 {
346 	struct max732x_chip *chip = irq_data_get_irq_chip_data(d);
347 
348 	mutex_lock(&chip->irq_lock);
349 	chip->irq_mask_cur = chip->irq_mask;
350 }
351 
352 static void max732x_irq_bus_sync_unlock(struct irq_data *d)
353 {
354 	struct max732x_chip *chip = irq_data_get_irq_chip_data(d);
355 
356 	max732x_irq_update_mask(chip);
357 	mutex_unlock(&chip->irq_lock);
358 }
359 
360 static int max732x_irq_set_type(struct irq_data *d, unsigned int type)
361 {
362 	struct max732x_chip *chip = irq_data_get_irq_chip_data(d);
363 	uint16_t off = d->irq - chip->irq_base;
364 	uint16_t mask = 1 << off;
365 
366 	if (!(mask & chip->dir_input)) {
367 		dev_dbg(&chip->client->dev, "%s port %d is output only\n",
368 			chip->client->name, off);
369 		return -EACCES;
370 	}
371 
372 	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
373 		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
374 			d->irq, type);
375 		return -EINVAL;
376 	}
377 
378 	if (type & IRQ_TYPE_EDGE_FALLING)
379 		chip->irq_trig_fall |= mask;
380 	else
381 		chip->irq_trig_fall &= ~mask;
382 
383 	if (type & IRQ_TYPE_EDGE_RISING)
384 		chip->irq_trig_raise |= mask;
385 	else
386 		chip->irq_trig_raise &= ~mask;
387 
388 	return max732x_gpio_direction_input(&chip->gpio_chip, off);
389 }
390 
391 static struct irq_chip max732x_irq_chip = {
392 	.name			= "max732x",
393 	.irq_mask		= max732x_irq_mask,
394 	.irq_unmask		= max732x_irq_unmask,
395 	.irq_bus_lock		= max732x_irq_bus_lock,
396 	.irq_bus_sync_unlock	= max732x_irq_bus_sync_unlock,
397 	.irq_set_type		= max732x_irq_set_type,
398 };
399 
400 static uint8_t max732x_irq_pending(struct max732x_chip *chip)
401 {
402 	uint8_t cur_stat;
403 	uint8_t old_stat;
404 	uint8_t trigger;
405 	uint8_t pending;
406 	uint16_t status;
407 	int ret;
408 
409 	ret = max732x_readw(chip, &status);
410 	if (ret)
411 		return 0;
412 
413 	trigger = status >> 8;
414 	trigger &= chip->irq_mask;
415 
416 	if (!trigger)
417 		return 0;
418 
419 	cur_stat = status & 0xFF;
420 	cur_stat &= chip->irq_mask;
421 
422 	old_stat = cur_stat ^ trigger;
423 
424 	pending = (old_stat & chip->irq_trig_fall) |
425 		  (cur_stat & chip->irq_trig_raise);
426 	pending &= trigger;
427 
428 	return pending;
429 }
430 
431 static irqreturn_t max732x_irq_handler(int irq, void *devid)
432 {
433 	struct max732x_chip *chip = devid;
434 	uint8_t pending;
435 	uint8_t level;
436 
437 	pending = max732x_irq_pending(chip);
438 
439 	if (!pending)
440 		return IRQ_HANDLED;
441 
442 	do {
443 		level = __ffs(pending);
444 		handle_nested_irq(level + chip->irq_base);
445 
446 		pending &= ~(1 << level);
447 	} while (pending);
448 
449 	return IRQ_HANDLED;
450 }
451 
452 static int max732x_irq_setup(struct max732x_chip *chip,
453 			     const struct i2c_device_id *id)
454 {
455 	struct i2c_client *client = chip->client;
456 	struct max732x_platform_data *pdata = client->dev.platform_data;
457 	int has_irq = max732x_features[id->driver_data] >> 32;
458 	int ret;
459 
460 	if (pdata->irq_base && has_irq != INT_NONE) {
461 		int lvl;
462 
463 		chip->irq_base = pdata->irq_base;
464 		chip->irq_features = has_irq;
465 		mutex_init(&chip->irq_lock);
466 
467 		for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) {
468 			int irq = lvl + chip->irq_base;
469 
470 			if (!(chip->dir_input & (1 << lvl)))
471 				continue;
472 
473 			irq_set_chip_data(irq, chip);
474 			irq_set_chip_and_handler(irq, &max732x_irq_chip,
475 						 handle_edge_irq);
476 			irq_set_nested_thread(irq, 1);
477 #ifdef CONFIG_ARM
478 			set_irq_flags(irq, IRQF_VALID);
479 #else
480 			irq_set_noprobe(irq);
481 #endif
482 		}
483 
484 		ret = request_threaded_irq(client->irq,
485 					   NULL,
486 					   max732x_irq_handler,
487 					   IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
488 					   dev_name(&client->dev), chip);
489 		if (ret) {
490 			dev_err(&client->dev, "failed to request irq %d\n",
491 				client->irq);
492 			goto out_failed;
493 		}
494 
495 		chip->gpio_chip.to_irq = max732x_gpio_to_irq;
496 	}
497 
498 	return 0;
499 
500 out_failed:
501 	chip->irq_base = 0;
502 	return ret;
503 }
504 
505 static void max732x_irq_teardown(struct max732x_chip *chip)
506 {
507 	if (chip->irq_base)
508 		free_irq(chip->client->irq, chip);
509 }
510 #else /* CONFIG_GPIO_MAX732X_IRQ */
511 static int max732x_irq_setup(struct max732x_chip *chip,
512 			     const struct i2c_device_id *id)
513 {
514 	struct i2c_client *client = chip->client;
515 	struct max732x_platform_data *pdata = client->dev.platform_data;
516 	int has_irq = max732x_features[id->driver_data] >> 32;
517 
518 	if (pdata->irq_base && has_irq != INT_NONE)
519 		dev_warn(&client->dev, "interrupt support not compiled in\n");
520 
521 	return 0;
522 }
523 
524 static void max732x_irq_teardown(struct max732x_chip *chip)
525 {
526 }
527 #endif
528 
529 static int __devinit max732x_setup_gpio(struct max732x_chip *chip,
530 					const struct i2c_device_id *id,
531 					unsigned gpio_start)
532 {
533 	struct gpio_chip *gc = &chip->gpio_chip;
534 	uint32_t id_data = (uint32_t)max732x_features[id->driver_data];
535 	int i, port = 0;
536 
537 	for (i = 0; i < 16; i++, id_data >>= 2) {
538 		unsigned int mask = 1 << port;
539 
540 		switch (id_data & 0x3) {
541 		case PORT_OUTPUT:
542 			chip->dir_output |= mask;
543 			break;
544 		case PORT_INPUT:
545 			chip->dir_input |= mask;
546 			break;
547 		case PORT_OPENDRAIN:
548 			chip->dir_output |= mask;
549 			chip->dir_input |= mask;
550 			break;
551 		default:
552 			continue;
553 		}
554 
555 		if (i < 8)
556 			chip->mask_group_a |= mask;
557 		port++;
558 	}
559 
560 	if (chip->dir_input)
561 		gc->direction_input = max732x_gpio_direction_input;
562 	if (chip->dir_output) {
563 		gc->direction_output = max732x_gpio_direction_output;
564 		gc->set = max732x_gpio_set_value;
565 	}
566 	gc->get = max732x_gpio_get_value;
567 	gc->can_sleep = 1;
568 
569 	gc->base = gpio_start;
570 	gc->ngpio = port;
571 	gc->label = chip->client->name;
572 	gc->owner = THIS_MODULE;
573 
574 	return port;
575 }
576 
577 static int __devinit max732x_probe(struct i2c_client *client,
578 				   const struct i2c_device_id *id)
579 {
580 	struct max732x_platform_data *pdata;
581 	struct max732x_chip *chip;
582 	struct i2c_client *c;
583 	uint16_t addr_a, addr_b;
584 	int ret, nr_port;
585 
586 	pdata = client->dev.platform_data;
587 	if (pdata == NULL) {
588 		dev_dbg(&client->dev, "no platform data\n");
589 		return -EINVAL;
590 	}
591 
592 	chip = kzalloc(sizeof(struct max732x_chip), GFP_KERNEL);
593 	if (chip == NULL)
594 		return -ENOMEM;
595 	chip->client = client;
596 
597 	nr_port = max732x_setup_gpio(chip, id, pdata->gpio_base);
598 
599 	addr_a = (client->addr & 0x0f) | 0x60;
600 	addr_b = (client->addr & 0x0f) | 0x50;
601 
602 	switch (client->addr & 0x70) {
603 	case 0x60:
604 		chip->client_group_a = client;
605 		if (nr_port > 8) {
606 			c = i2c_new_dummy(client->adapter, addr_b);
607 			chip->client_group_b = chip->client_dummy = c;
608 		}
609 		break;
610 	case 0x50:
611 		chip->client_group_b = client;
612 		if (nr_port > 8) {
613 			c = i2c_new_dummy(client->adapter, addr_a);
614 			chip->client_group_a = chip->client_dummy = c;
615 		}
616 		break;
617 	default:
618 		dev_err(&client->dev, "invalid I2C address specified %02x\n",
619 				client->addr);
620 		ret = -EINVAL;
621 		goto out_failed;
622 	}
623 
624 	mutex_init(&chip->lock);
625 
626 	max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]);
627 	if (nr_port > 8)
628 		max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]);
629 
630 	ret = max732x_irq_setup(chip, id);
631 	if (ret)
632 		goto out_failed;
633 
634 	ret = gpiochip_add(&chip->gpio_chip);
635 	if (ret)
636 		goto out_failed;
637 
638 	if (pdata->setup) {
639 		ret = pdata->setup(client, chip->gpio_chip.base,
640 				chip->gpio_chip.ngpio, pdata->context);
641 		if (ret < 0)
642 			dev_warn(&client->dev, "setup failed, %d\n", ret);
643 	}
644 
645 	i2c_set_clientdata(client, chip);
646 	return 0;
647 
648 out_failed:
649 	max732x_irq_teardown(chip);
650 	kfree(chip);
651 	return ret;
652 }
653 
654 static int __devexit max732x_remove(struct i2c_client *client)
655 {
656 	struct max732x_platform_data *pdata = client->dev.platform_data;
657 	struct max732x_chip *chip = i2c_get_clientdata(client);
658 	int ret;
659 
660 	if (pdata->teardown) {
661 		ret = pdata->teardown(client, chip->gpio_chip.base,
662 				chip->gpio_chip.ngpio, pdata->context);
663 		if (ret < 0) {
664 			dev_err(&client->dev, "%s failed, %d\n",
665 					"teardown", ret);
666 			return ret;
667 		}
668 	}
669 
670 	ret = gpiochip_remove(&chip->gpio_chip);
671 	if (ret) {
672 		dev_err(&client->dev, "%s failed, %d\n",
673 				"gpiochip_remove()", ret);
674 		return ret;
675 	}
676 
677 	max732x_irq_teardown(chip);
678 
679 	/* unregister any dummy i2c_client */
680 	if (chip->client_dummy)
681 		i2c_unregister_device(chip->client_dummy);
682 
683 	kfree(chip);
684 	return 0;
685 }
686 
687 static struct i2c_driver max732x_driver = {
688 	.driver = {
689 		.name	= "max732x",
690 		.owner	= THIS_MODULE,
691 	},
692 	.probe		= max732x_probe,
693 	.remove		= __devexit_p(max732x_remove),
694 	.id_table	= max732x_id,
695 };
696 
697 static int __init max732x_init(void)
698 {
699 	return i2c_add_driver(&max732x_driver);
700 }
701 /* register after i2c postcore initcall and before
702  * subsys initcalls that may rely on these GPIOs
703  */
704 subsys_initcall(max732x_init);
705 
706 static void __exit max732x_exit(void)
707 {
708 	i2c_del_driver(&max732x_driver);
709 }
710 module_exit(max732x_exit);
711 
712 MODULE_AUTHOR("Eric Miao <eric.miao@marvell.com>");
713 MODULE_DESCRIPTION("GPIO expander driver for MAX732X");
714 MODULE_LICENSE("GPL");
715