lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

170-add-generic-spidev-driver.patch (5330B)


      1 --- a/Makefile.am
      2 +++ b/Makefile.am
      3 @@ -71,6 +71,8 @@ drv_generic_i2c.c             \
      4  drv_generic_i2c.h             \
      5  drv_generic_keypad.c          \
      6  drv_generic_keypad.h          \
      7 +drv_generic_spidev.c          \
      8 +drv_generic_spidev.h          \
      9  drv_ASTUSB.c                  \
     10  drv_BeckmannEgle.c            \
     11  drv_BWCT.c                    \
     12 --- /dev/null
     13 +++ b/drv_generic_spidev.c
     14 @@ -0,0 +1,89 @@
     15 +/* $Id$
     16 + * $URL$
     17 + *
     18 + * generic driver helper for displays connected via SPI bus
     19 + *
     20 + * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
     21 + *
     22 + * This file is part of LCD4Linux.
     23 + *
     24 + * LCD4Linux is free software; you can redistribute it and/or modify
     25 + * it under the terms of the GNU General Public License as published by
     26 + * the Free Software Foundation; either version 2, or (at your option)
     27 + * any later version.
     28 + *
     29 + * LCD4Linux is distributed in the hope that it will be useful,
     30 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
     31 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     32 + * GNU General Public License for more details.
     33 + *
     34 + * You should have received a copy of the GNU General Public License
     35 + * along with this program; if not, write to the Free Software
     36 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     37 + *
     38 + */
     39 +
     40 +#include "config.h"
     41 +
     42 +#include <stdlib.h>
     43 +#include <stdio.h>
     44 +#include <string.h>
     45 +#include <errno.h>
     46 +#include <unistd.h>
     47 +#include <fcntl.h>
     48 +#include <sys/types.h>
     49 +#include <sys/ioctl.h>
     50 +
     51 +#include "debug.h"
     52 +#include "qprintf.h"
     53 +#include "cfg.h"
     54 +#include "drv_generic_spidev.h"
     55 +
     56 +static char *generic_spidev_section = "";
     57 +static char *generic_spidev_driver = "";
     58 +static int generic_spidev_fd;
     59 +
     60 +int drv_generic_spidev_open(const char *section, const char *driver)
     61 +{
     62 +    char *spidev;
     63 +
     64 +    udelay_init();
     65 +
     66 +    generic_spidev_section = (char *) section;
     67 +    generic_spidev_driver = (char *) driver;
     68 +
     69 +    spidev = cfg_get(generic_spidev_section, "Port", NULL);
     70 +
     71 +    info("%s: initializing SPI device %s", generic_spidev_driver, spidev);
     72 +    generic_spidev_fd = open(spidev, O_WRONLY);
     73 +    if (generic_spidev_fd < 0) {
     74 +	error("%s: unable to open SPI device %s!\n", generic_spidev_driver, spidev);
     75 +	goto exit_error;
     76 +    }
     77 +
     78 +    return 0;
     79 +
     80 +  exit_error:
     81 +    free(spidev);
     82 +    return -1;
     83 +}
     84 +
     85 +int drv_generic_spidev_close(void)
     86 +{
     87 +    close(generic_spidev_fd);
     88 +    return 0;
     89 +}
     90 +
     91 +int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr)
     92 +{
     93 +    int ret;
     94 +
     95 +    ret = ioctl(generic_spidev_fd, SPI_IOC_MESSAGE(count), tr);
     96 +    if (ret < count) {
     97 +	error("%s: can't send SPI message! (%s)\n",
     98 +		generic_spidev_driver, strerror(errno));
     99 +	return -1;
    100 +    }
    101 +
    102 +    return 0;
    103 +}
    104 --- /dev/null
    105 +++ b/drv_generic_spidev.h
    106 @@ -0,0 +1,54 @@
    107 +/* $Id$
    108 + * $URL$
    109 + *
    110 + * generic driver helper for displays connected via SPI bus
    111 + *
    112 + * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
    113 + * Copyright (C) 2012 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
    114 + *
    115 + * This file is part of LCD4Linux.
    116 + *
    117 + * LCD4Linux is free software; you can redistribute it and/or modify
    118 + * it under the terms of the GNU General Public License as published by
    119 + * the Free Software Foundation; either version 2, or (at your option)
    120 + * any later version.
    121 + *
    122 + * LCD4Linux is distributed in the hope that it will be useful,
    123 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    124 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    125 + * GNU General Public License for more details.
    126 + *
    127 + * You should have received a copy of the GNU General Public License
    128 + * along with this program; if not, write to the Free Software
    129 + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    130 + *
    131 + */
    132 +
    133 +/*
    134 + *
    135 + * exported fuctions:
    136 + *
    137 + * int drv_generic_spidev_open (const char *section, const char *driver)
    138 + *   reads 'Port' entry from config and opens
    139 + *   the SPI device
    140 + *   returns 0 if ok, -1 on failure
    141 + *
    142 + * int drv_generic_spidev_close (void)
    143 + *   closes SPI device
    144 + *   returns 0 if ok, -1 on failure
    145 + *
    146 + * void drv_generic_spidev_transfer (int count, struct spi_ioc_transfer *tr)
    147 + *   transfer data to/from the SPI device
    148 + *
    149 + */
    150 +
    151 +#ifndef _DRV_GENERIC_SPIDEV_H_
    152 +#define _DRV_GENERIC_SPIDEV_H_
    153 +
    154 +#include <linux/spi/spidev.h>
    155 +
    156 +int drv_generic_spidev_open(const char *section, const char *driver);
    157 +int drv_generic_spidev_close(void);
    158 +int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr);
    159 +
    160 +#endif /* _DRV_GENERIC_SPIDEV_H_ */
    161 --- a/drivers.m4
    162 +++ b/drivers.m4
    163 @@ -301,6 +301,7 @@ PARPORT="no"
    164  SERIAL="no"
    165  I2C="no"
    166  KEYPAD="no"
    167 +SPIDEV="no"
    168  
    169  # generic libraries
    170  LIBUSB="no"
    171 @@ -936,6 +937,12 @@ if test "$LIBJPEG" = "yes"; then
    172     DRVLIBS="$DRVLIBS -ljpeg"
    173  fi
    174  
    175 +# generic spidev driver
    176 +if test "$SPIDEV" = "yes"; then
    177 +   DRIVERS="$DRIVERS drv_generic_spidev.o"
    178 +   AC_DEFINE(WITH_SPIDEV, 1, [SPIDEV driver])
    179 +fi
    180 +
    181  # libusb
    182  if test "$LIBUSB" = "yes"; then
    183     DRVLIBS="$DRVLIBS -lusb"
    184 --- a/configure.ac
    185 +++ b/configure.ac
    186 @@ -115,6 +115,9 @@ AC_ARG_WITH(outb,
    187  
    188  AC_CHECK_HEADERS([asm/io.h] [linux/parport.h linux/ppdev.h], [has_parport="true"], [has_parport="false"])
    189  
    190 +# check for spidev
    191 +AC_CHECK_HEADERS([linux/spi/spidev.h], [has_spidev="true"], [has_spidev="false"])
    192 +
    193  # drivers
    194  sinclude(drivers.m4)
    195