gpio-ts5500.c (01b944fe1cd4e21a2a9ed51adbdbafe2d5e905ba) gpio-ts5500.c (58383c78425e4ee1c077253cf297b641c861c02e)
1/*
2 * Digital I/O driver for Technologic Systems TS-5500
3 *
4 * Copyright (c) 2012 Savoir-faire Linux Inc.
5 * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
6 *
7 * Technologic Systems platforms have pin blocks, exposing several Digital
8 * Input/Output lines (DIO). This driver aims to support single pin blocks.

--- 301 unchanged lines hidden (view full) ---

310 spin_lock_irqsave(&priv->lock, flags);
311 if (priv->hwirq == 7)
312 ts5500_clear_mask(BIT(7), 0x7a); /* DIO1_13 on IRQ7 */
313 else if (priv->hwirq == 6)
314 ts5500_clear_mask(BIT(7), 0x7d); /* DIO2_13 on IRQ6 */
315 else if (priv->hwirq == 1)
316 ts5500_clear_mask(BIT(6), 0x7d); /* LCD_RS on IRQ1 */
317 else
1/*
2 * Digital I/O driver for Technologic Systems TS-5500
3 *
4 * Copyright (c) 2012 Savoir-faire Linux Inc.
5 * Vivien Didelot <vivien.didelot@savoirfairelinux.com>
6 *
7 * Technologic Systems platforms have pin blocks, exposing several Digital
8 * Input/Output lines (DIO). This driver aims to support single pin blocks.

--- 301 unchanged lines hidden (view full) ---

310 spin_lock_irqsave(&priv->lock, flags);
311 if (priv->hwirq == 7)
312 ts5500_clear_mask(BIT(7), 0x7a); /* DIO1_13 on IRQ7 */
313 else if (priv->hwirq == 6)
314 ts5500_clear_mask(BIT(7), 0x7d); /* DIO2_13 on IRQ6 */
315 else if (priv->hwirq == 1)
316 ts5500_clear_mask(BIT(6), 0x7d); /* LCD_RS on IRQ1 */
317 else
318 dev_err(priv->gpio_chip.dev, "invalid hwirq %d\n", priv->hwirq);
318 dev_err(priv->gpio_chip.parent, "invalid hwirq %d\n",
319 priv->hwirq);
319 spin_unlock_irqrestore(&priv->lock, flags);
320}
321
322static int ts5500_dio_probe(struct platform_device *pdev)
323{
324 enum ts5500_blocks block = platform_get_device_id(pdev)->driver_data;
325 struct ts5500_dio_platform_data *pdata = dev_get_platdata(&pdev->dev);
326 struct device *dev = &pdev->dev;

--- 14 unchanged lines hidden (view full) ---

341 return -ENOMEM;
342
343 platform_set_drvdata(pdev, priv);
344 priv->hwirq = res->start;
345 spin_lock_init(&priv->lock);
346
347 priv->gpio_chip.owner = THIS_MODULE;
348 priv->gpio_chip.label = name;
320 spin_unlock_irqrestore(&priv->lock, flags);
321}
322
323static int ts5500_dio_probe(struct platform_device *pdev)
324{
325 enum ts5500_blocks block = platform_get_device_id(pdev)->driver_data;
326 struct ts5500_dio_platform_data *pdata = dev_get_platdata(&pdev->dev);
327 struct device *dev = &pdev->dev;

--- 14 unchanged lines hidden (view full) ---

342 return -ENOMEM;
343
344 platform_set_drvdata(pdev, priv);
345 priv->hwirq = res->start;
346 spin_lock_init(&priv->lock);
347
348 priv->gpio_chip.owner = THIS_MODULE;
349 priv->gpio_chip.label = name;
349 priv->gpio_chip.dev = dev;
350 priv->gpio_chip.parent = dev;
350 priv->gpio_chip.direction_input = ts5500_gpio_input;
351 priv->gpio_chip.direction_output = ts5500_gpio_output;
352 priv->gpio_chip.get = ts5500_gpio_get;
353 priv->gpio_chip.set = ts5500_gpio_set;
354 priv->gpio_chip.to_irq = ts5500_gpio_to_irq;
355 priv->gpio_chip.base = -1;
356 if (pdata) {
357 priv->gpio_chip.base = pdata->base;

--- 108 unchanged lines hidden ---
351 priv->gpio_chip.direction_input = ts5500_gpio_input;
352 priv->gpio_chip.direction_output = ts5500_gpio_output;
353 priv->gpio_chip.get = ts5500_gpio_get;
354 priv->gpio_chip.set = ts5500_gpio_set;
355 priv->gpio_chip.to_irq = ts5500_gpio_to_irq;
356 priv->gpio_chip.base = -1;
357 if (pdata) {
358 priv->gpio_chip.base = pdata->base;

--- 108 unchanged lines hidden ---