mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			195 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/Makefile.am
 | |
| +++ b/Makefile.am
 | |
| @@ -71,6 +71,8 @@ drv_generic_i2c.c             \
 | |
|  drv_generic_i2c.h             \
 | |
|  drv_generic_keypad.c          \
 | |
|  drv_generic_keypad.h          \
 | |
| +drv_generic_spidev.c          \
 | |
| +drv_generic_spidev.h          \
 | |
|  drv_ASTUSB.c                  \
 | |
|  drv_BeckmannEgle.c            \
 | |
|  drv_BWCT.c                    \
 | |
| --- /dev/null
 | |
| +++ b/drv_generic_spidev.c
 | |
| @@ -0,0 +1,89 @@
 | |
| +/* $Id$
 | |
| + * $URL$
 | |
| + *
 | |
| + * generic driver helper for displays connected via SPI bus
 | |
| + *
 | |
| + * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
 | |
| + *
 | |
| + * This file is part of LCD4Linux.
 | |
| + *
 | |
| + * LCD4Linux is free software; you can redistribute it and/or modify
 | |
| + * it under the terms of the GNU General Public License as published by
 | |
| + * the Free Software Foundation; either version 2, or (at your option)
 | |
| + * any later version.
 | |
| + *
 | |
| + * LCD4Linux is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
| + *
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | |
| + *
 | |
| + */
 | |
| +
 | |
| +#include "config.h"
 | |
| +
 | |
| +#include <stdlib.h>
 | |
| +#include <stdio.h>
 | |
| +#include <string.h>
 | |
| +#include <errno.h>
 | |
| +#include <unistd.h>
 | |
| +#include <fcntl.h>
 | |
| +#include <sys/types.h>
 | |
| +#include <sys/ioctl.h>
 | |
| +
 | |
| +#include "debug.h"
 | |
| +#include "qprintf.h"
 | |
| +#include "cfg.h"
 | |
| +#include "drv_generic_spidev.h"
 | |
| +
 | |
| +static char *generic_spidev_section = "";
 | |
| +static char *generic_spidev_driver = "";
 | |
| +static int generic_spidev_fd;
 | |
| +
 | |
| +int drv_generic_spidev_open(const char *section, const char *driver)
 | |
| +{
 | |
| +    char *spidev;
 | |
| +
 | |
| +    udelay_init();
 | |
| +
 | |
| +    generic_spidev_section = (char *) section;
 | |
| +    generic_spidev_driver = (char *) driver;
 | |
| +
 | |
| +    spidev = cfg_get(generic_spidev_section, "Port", NULL);
 | |
| +
 | |
| +    info("%s: initializing SPI device %s", generic_spidev_driver, spidev);
 | |
| +    generic_spidev_fd = open(spidev, O_WRONLY);
 | |
| +    if (generic_spidev_fd < 0) {
 | |
| +	error("%s: unable to open SPI device %s!\n", generic_spidev_driver, spidev);
 | |
| +	goto exit_error;
 | |
| +    }
 | |
| +
 | |
| +    return 0;
 | |
| +
 | |
| +  exit_error:
 | |
| +    free(spidev);
 | |
| +    return -1;
 | |
| +}
 | |
| +
 | |
| +int drv_generic_spidev_close(void)
 | |
| +{
 | |
| +    close(generic_spidev_fd);
 | |
| +    return 0;
 | |
| +}
 | |
| +
 | |
| +int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr)
 | |
| +{
 | |
| +    int ret;
 | |
| +
 | |
| +    ret = ioctl(generic_spidev_fd, SPI_IOC_MESSAGE(count), tr);
 | |
| +    if (ret < count) {
 | |
| +	error("%s: can't send SPI message! (%s)\n",
 | |
| +		generic_spidev_driver, strerror(errno));
 | |
| +	return -1;
 | |
| +    }
 | |
| +
 | |
| +    return 0;
 | |
| +}
 | |
| --- /dev/null
 | |
| +++ b/drv_generic_spidev.h
 | |
| @@ -0,0 +1,54 @@
 | |
| +/* $Id$
 | |
| + * $URL$
 | |
| + *
 | |
| + * generic driver helper for displays connected via SPI bus
 | |
| + *
 | |
| + * Copyright (C) 2012 Gabor Juhos <juhosg@openwrt.org>
 | |
| + * Copyright (C) 2012 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
 | |
| + *
 | |
| + * This file is part of LCD4Linux.
 | |
| + *
 | |
| + * LCD4Linux is free software; you can redistribute it and/or modify
 | |
| + * it under the terms of the GNU General Public License as published by
 | |
| + * the Free Software Foundation; either version 2, or (at your option)
 | |
| + * any later version.
 | |
| + *
 | |
| + * LCD4Linux is distributed in the hope that it will be useful,
 | |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| + * GNU General Public License for more details.
 | |
| + *
 | |
| + * You should have received a copy of the GNU General Public License
 | |
| + * along with this program; if not, write to the Free Software
 | |
| + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | |
| + *
 | |
| + */
 | |
| +
 | |
| +/*
 | |
| + *
 | |
| + * exported fuctions:
 | |
| + *
 | |
| + * int drv_generic_spidev_open (const char *section, const char *driver)
 | |
| + *   reads 'Port' entry from config and opens
 | |
| + *   the SPI device
 | |
| + *   returns 0 if ok, -1 on failure
 | |
| + *
 | |
| + * int drv_generic_spidev_close (void)
 | |
| + *   closes SPI device
 | |
| + *   returns 0 if ok, -1 on failure
 | |
| + *
 | |
| + * void drv_generic_spidev_transfer (int count, struct spi_ioc_transfer *tr)
 | |
| + *   transfer data to/from the SPI device
 | |
| + *
 | |
| + */
 | |
| +
 | |
| +#ifndef _DRV_GENERIC_SPIDEV_H_
 | |
| +#define _DRV_GENERIC_SPIDEV_H_
 | |
| +
 | |
| +#include <linux/spi/spidev.h>
 | |
| +
 | |
| +int drv_generic_spidev_open(const char *section, const char *driver);
 | |
| +int drv_generic_spidev_close(void);
 | |
| +int drv_generic_spidev_transfer(const int count, struct spi_ioc_transfer *tr);
 | |
| +
 | |
| +#endif /* _DRV_GENERIC_SPIDEV_H_ */
 | |
| --- a/drivers.m4
 | |
| +++ b/drivers.m4
 | |
| @@ -301,6 +301,7 @@ PARPORT="no"
 | |
|  SERIAL="no"
 | |
|  I2C="no"
 | |
|  KEYPAD="no"
 | |
| +SPIDEV="no"
 | |
|  
 | |
|  # generic libraries
 | |
|  LIBUSB="no"
 | |
| @@ -936,6 +937,12 @@ if test "$LIBJPEG" = "yes"; then
 | |
|     DRVLIBS="$DRVLIBS -ljpeg"
 | |
|  fi
 | |
|  
 | |
| +# generic spidev driver
 | |
| +if test "$SPIDEV" = "yes"; then
 | |
| +   DRIVERS="$DRIVERS drv_generic_spidev.o"
 | |
| +   AC_DEFINE(WITH_SPIDEV, 1, [SPIDEV driver])
 | |
| +fi
 | |
| +
 | |
|  # libusb
 | |
|  if test "$LIBUSB" = "yes"; then
 | |
|     DRVLIBS="$DRVLIBS -lusb"
 | |
| --- a/configure.ac
 | |
| +++ b/configure.ac
 | |
| @@ -115,6 +115,9 @@ AC_ARG_WITH(outb,
 | |
|  
 | |
|  AC_CHECK_HEADERS([asm/io.h] [linux/parport.h linux/ppdev.h], [has_parport="true"], [has_parport="false"])
 | |
|  
 | |
| +# check for spidev
 | |
| +AC_CHECK_HEADERS([linux/spi/spidev.h], [has_spidev="true"], [has_spidev="false"])
 | |
| +
 | |
|  # drivers
 | |
|  sinclude(drivers.m4)
 | |
|  
 |