* [PATCH v3 0/3] sandbox: add gpio support with libftdi1 @ 2018-01-22 9:59 Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 1/3] sandbox: avoid symbol conflict for {open, read, close}dir Antony Pavlov ` (3 more replies) 0 siblings, 4 replies; 8+ messages in thread From: Antony Pavlov @ 2018-01-22 9:59 UTC (permalink / raw) To: barebox This patch series makes it possible to use FT2232H ACBUS[7:0] pins as gpio pins from sandbox barebox. There are ready-to-use FT2232H-based boards: * FT2232H-56Q Mini-Module (http://www.ftdichip.com/Products/Modules/DevelopmentModules.htm#FT2232H-56_Mini) * FT2232 breakout board (http://dangerousprototypes.com/docs/FT2232_breakout_board) The main goal of adding gpio functionality to sandbox barebox is using it for connecting real i2c and spi devices to sandbox barebox. Sample dts-file for at24 i2c eeprom and at25 spi flash is included. Changes since v2 patch series (http://lists.infradead.org/pipermail/barebox/2018-January/031887.html): * ftdi USB IDs are moved to dts, parseopt_* functions are unused; * dts stuff moved to sandbox-libftdi-example.dtsi; * led example is added. Changes since v1 patch series (http://lists.infradead.org/pipermail/barebox/2017-October/031306.html): * rebase on top barebox v2017.12.0; * ds1307 i2c rtc driver works fine (i2c-gpio,scl-output-only is used); * parseopt_* functions are used for cmdline parsing. Changes since RFC v1 patch series (http://lists.infradead.org/pipermail/barebox/2017-February/029106.html): * rebase on top barebox v2017.10.0; * libftdi cmdline options are added; * device tree support is added. Antony Pavlov (3): sandbox: avoid symbol conflict for {open,read,close}dir sandbox: add gpio support with libftdi1 sandbox: add i2c and spi libftdi1 bit-bang example arch/sandbox/Kconfig | 1 + arch/sandbox/Makefile | 10 +- arch/sandbox/configs/sandbox_defconfig | 21 +++- arch/sandbox/dts/sandbox-libftdi-example.dtsi | 80 +++++++++++++ arch/sandbox/mach-sandbox/include/mach/linux.h | 12 ++ arch/sandbox/os/Makefile | 3 + arch/sandbox/os/ftdi.c | 154 +++++++++++++++++++++++++ drivers/gpio/Kconfig | 4 + drivers/gpio/Makefile | 1 + drivers/gpio/gpio-libftdi1.c | 137 ++++++++++++++++++++++ 10 files changed, 420 insertions(+), 3 deletions(-) create mode 100644 arch/sandbox/dts/sandbox-libftdi-example.dtsi create mode 100644 arch/sandbox/os/ftdi.c create mode 100644 drivers/gpio/gpio-libftdi1.c -- 2.15.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/3] sandbox: avoid symbol conflict for {open, read, close}dir 2018-01-22 9:59 [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov @ 2018-01-22 9:59 ` Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 2/3] sandbox: add gpio support with libftdi1 Antony Pavlov ` (2 subsequent siblings) 3 siblings, 0 replies; 8+ messages in thread From: Antony Pavlov @ 2018-01-22 9:59 UTC (permalink / raw) To: barebox This fixes libusb's /dev/bus/usb directory scan. Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> --- arch/sandbox/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/sandbox/Makefile b/arch/sandbox/Makefile index 8155a790eb..9d545c3b71 100644 --- a/arch/sandbox/Makefile +++ b/arch/sandbox/Makefile @@ -21,7 +21,9 @@ CFLAGS += -Dmalloc=barebox_malloc -Dcalloc=barebox_calloc \ -Dfputs=barebox_fputs -Dsetenv=barebox_setenv \ -Dgetenv=barebox_getenv -Dprintf=barebox_printf \ -Dglob=barebox_glob -Dglobfree=barebox_globfree \ - -Dioctl=barebox_ioctl -Dfstat=barebox_fstat + -Dioctl=barebox_ioctl -Dfstat=barebox_fstat \ + -Dopendir=barebox_opendir -Dreaddir=barebox_readdir \ + -Dclosedir=barebox_closedir machdirs := $(patsubst %,arch/sandbox/mach-%/,$(machine-y)) -- 2.15.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 2/3] sandbox: add gpio support with libftdi1 2018-01-22 9:59 [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 1/3] sandbox: avoid symbol conflict for {open, read, close}dir Antony Pavlov @ 2018-01-22 9:59 ` Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example Antony Pavlov 2018-01-24 9:10 ` [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov 3 siblings, 0 replies; 8+ messages in thread From: Antony Pavlov @ 2018-01-22 9:59 UTC (permalink / raw) To: barebox Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> --- arch/sandbox/Kconfig | 1 + arch/sandbox/Makefile | 6 +- arch/sandbox/mach-sandbox/include/mach/linux.h | 12 ++ arch/sandbox/os/Makefile | 3 + arch/sandbox/os/ftdi.c | 154 +++++++++++++++++++++++++ drivers/gpio/Kconfig | 4 + drivers/gpio/Makefile | 1 + drivers/gpio/gpio-libftdi1.c | 137 ++++++++++++++++++++++ 8 files changed, 317 insertions(+), 1 deletion(-) diff --git a/arch/sandbox/Kconfig b/arch/sandbox/Kconfig index 9c72673bde..3f1cefb837 100644 --- a/arch/sandbox/Kconfig +++ b/arch/sandbox/Kconfig @@ -1,6 +1,7 @@ config SANDBOX bool select OFTREE + select GPIOLIB default y config ARCH_TEXT_BASE diff --git a/arch/sandbox/Makefile b/arch/sandbox/Makefile index 9d545c3b71..85c70b5e80 100644 --- a/arch/sandbox/Makefile +++ b/arch/sandbox/Makefile @@ -41,9 +41,13 @@ ifeq ($(CONFIG_DRIVER_VIDEO_SDL),y) SDL_LIBS := $(shell pkg-config sdl --libs) endif +ifeq ($(CONFIG_GPIO_LIBFTDI1),y) +FTDI1_LIBS := $(shell pkg-config libftdi1 --libs) +endif + cmd_barebox__ = $(CC) -o $@ -Wl,-T,$(barebox-lds) \ -Wl,--start-group $(barebox-common) -Wl,--end-group \ - -lrt -lpthread $(SDL_LIBS) + -lrt -lpthread $(SDL_LIBS) $(FTDI1_LIBS) common-y += $(BOARD) arch/sandbox/os/ diff --git a/arch/sandbox/mach-sandbox/include/mach/linux.h b/arch/sandbox/mach-sandbox/include/mach/linux.h index 1327a56cab..52360f8771 100644 --- a/arch/sandbox/mach-sandbox/include/mach/linux.h +++ b/arch/sandbox/mach-sandbox/include/mach/linux.h @@ -38,4 +38,16 @@ void sdl_get_bitfield_rgba(struct fb_bitfield *r, struct fb_bitfield *g, struct fb_bitfield *b, struct fb_bitfield *a); void sdl_setpixel(int x, int y, uint8_t r, uint8_t g, uint8_t b, uint8_t a); +struct ft2232_bitbang; +struct ft2232_bitbang *barebox_libftdi1_open(int vendor_id, int device_id, + const char *serial); +void barebox_libftdi1_gpio_direction(struct ft2232_bitbang *ftbb, + unsigned off, unsigned dir); +int barebox_libftdi1_gpio_get_value(struct ft2232_bitbang *ftbb, + unsigned off); +void barebox_libftdi1_gpio_set_value(struct ft2232_bitbang *ftbb, + unsigned off, unsigned val); +int barebox_libftdi1_update(struct ft2232_bitbang *ftbb); +void barebox_libftdi1_close(void); + #endif /* __ASM_ARCH_LINUX_H */ diff --git a/arch/sandbox/os/Makefile b/arch/sandbox/os/Makefile index 537f848e06..75baa34a83 100644 --- a/arch/sandbox/os/Makefile +++ b/arch/sandbox/os/Makefile @@ -17,3 +17,6 @@ obj-y = common.o tap.o CFLAGS_sdl.o = $(shell pkg-config sdl --cflags) obj-$(CONFIG_DRIVER_VIDEO_SDL) += sdl.o + +CFLAGS_ftdi.o = $(shell pkg-config libftdi1 --cflags) +obj-$(CONFIG_GPIO_LIBFTDI1) += ftdi.o diff --git a/arch/sandbox/os/ftdi.c b/arch/sandbox/os/ftdi.c new file mode 100644 index 0000000000..6485d5cfab --- /dev/null +++ b/arch/sandbox/os/ftdi.c @@ -0,0 +1,154 @@ +/* + * sandbox barebox libftdi1 support + * + * Copyright (C) 2016, 2017 Antony Pavlov <antonynpavlov@gmail.com> + * + * This program 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 of + * the License, or (at your option) any later version. + * + * This program 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. + * + */ + +#include <stdio.h> +#include <ftdi.h> + +#define GPIOF_DIR_OUT (0 << 0) +#define GPIOF_DIR_IN (1 << 0) + +#define BIT(nr) (1UL << (nr)) + +struct ft2232_bitbang { + struct ftdi_context *ftdi; + uint8_t odata; + uint8_t dir; +}; + +static struct ft2232_bitbang ftbb; + +static inline int ftdi_flush(struct ftdi_context *ftdi) +{ + uint8_t buf[1]; + int ret; + + buf[0] = SEND_IMMEDIATE; + + ret = ftdi_write_data(ftdi, buf, 1); + + return ret; +} + +static int ftdi_get_high_byte_data(struct ftdi_context *ftdi, uint8_t *data) +{ + uint8_t obuf; + int ret; + + obuf = GET_BITS_HIGH; + ret = ftdi_write_data(ftdi, &obuf, 1); + + ret = ftdi_read_data(ftdi, data, 1); + + return ret; +} + +static int ftdi_set_high_byte_data_dir(struct ft2232_bitbang *ftbb) +{ + uint8_t buf[3]; + int ret; + + buf[0] = SET_BITS_HIGH; + buf[1] = ftbb->odata; + buf[2] = ftbb->dir; + + ret = ftdi_write_data(ftbb->ftdi, buf, 3); + ftdi_flush(ftbb->ftdi); + + return ret; +} + +int barebox_libftdi1_update(struct ft2232_bitbang *ftbb) +{ + return ftdi_set_high_byte_data_dir(ftbb); +} + +void barebox_libftdi1_gpio_direction(struct ft2232_bitbang *ftbb, + unsigned off, unsigned dir) +{ + switch (dir) { + case GPIOF_DIR_IN: + ftbb->dir &= ~BIT(off); + break; + case GPIOF_DIR_OUT: + ftbb->dir |= BIT(off); + break; + default: + printf("%s:%d: invalid dir argument\n", __FILE__, __LINE__); + } +} + +int barebox_libftdi1_gpio_get_value(struct ft2232_bitbang *ftbb, unsigned off) +{ + uint8_t data; + + ftdi_get_high_byte_data(ftbb->ftdi, &data); + + return !!(data & BIT(off)); +} + +void barebox_libftdi1_gpio_set_value(struct ft2232_bitbang *ftbb, + unsigned off, unsigned val) +{ + if (val) + ftbb->odata |= BIT(off); + else + ftbb->odata &= ~BIT(off); +} + +struct ft2232_bitbang *barebox_libftdi1_open(int id_vendor, int id_product, + const char *serial) +{ + struct ftdi_context *ftdi; + int ret; + + ftdi = ftdi_new(); + if (!ftdi) { + fprintf(stderr, "ftdi_new failed\n"); + goto error; + } + + ret = ftdi_usb_open_desc(ftdi, id_vendor, id_product, NULL, serial); + if (ret < 0 && ret != -5) { + fprintf(stderr, "unable to open ftdi device: %d (%s)\n", + ret, ftdi_get_error_string(ftdi)); + goto error; + } + + ftdi_set_interface(ftdi, INTERFACE_A); + ftdi_set_bitmode(ftdi, 0x00, BITMODE_MPSSE); + + ftbb.ftdi = ftdi; + + /* reset pins to default neutral state */ + ftbb.dir = 0; + ftbb.odata = 0; + ftdi_set_high_byte_data_dir(&ftbb); + + return &ftbb; + +error: + return NULL; +} + +void barebox_libftdi1_close(void) +{ + struct ftdi_context *ftdi = ftbb.ftdi; + + ftdi_set_interface(ftdi, INTERFACE_ANY); + ftdi_usb_close(ftdi); + ftdi_free(ftdi); +} diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 434c5688b4..ed93e868ae 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -132,6 +132,10 @@ config GPIO_SX150X Say Y here to build support for the Semtec Sx150x I2C GPIO expander chip. +config GPIO_LIBFTDI1 + bool "libftdi1 driver" + depends on SANDBOX + endmenu endif diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index f37dd08f1a..f5ed876d5e 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_GPIO_CLPS711X) += gpio-clps711x.o obj-$(CONFIG_GPIO_DIGIC) += gpio-digic.o obj-$(CONFIG_GPIO_GENERIC) += gpio-generic.o obj-$(CONFIG_GPIO_IMX) += gpio-imx.o +obj-$(CONFIG_GPIO_LIBFTDI1) += gpio-libftdi1.o obj-$(CONFIG_GPIO_MXS) += gpio-mxs.o obj-$(CONFIG_GPIO_JZ4740) += gpio-jz4740.o obj-$(CONFIG_GPIO_MALTA_FPGA_I2C) += gpio-malta-fpga-i2c.o diff --git a/drivers/gpio/gpio-libftdi1.c b/drivers/gpio/gpio-libftdi1.c new file mode 100644 index 0000000000..cd36b08ca6 --- /dev/null +++ b/drivers/gpio/gpio-libftdi1.c @@ -0,0 +1,137 @@ +/* + * libftdi1 sandbox barebox GPIO driver + * + * Copyright (C) 2016, 2017 Antony Pavlov <antonynpavlov@gmail.com> + * + * This program 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 of + * the License, or (at your option) any later version. + * + * This program 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. + * + */ + +#include <common.h> +#include <errno.h> +#include <gpio.h> +#include <init.h> +#include <malloc.h> +#include <mach/linux.h> + +struct libftdi1_gpio_chip { + struct gpio_chip chip; + struct ft2232_bitbang *ftbb; +}; + +static int libftdi1_gpio_direction_input(struct gpio_chip *chip, unsigned off) +{ + struct libftdi1_gpio_chip *gpio = + container_of(chip, struct libftdi1_gpio_chip, chip); + + barebox_libftdi1_gpio_direction(gpio->ftbb, off, GPIOF_DIR_IN); + barebox_libftdi1_update(gpio->ftbb); + + return 0; +} + +static int libftdi1_gpio_direction_output( + struct gpio_chip *chip, unsigned off, int value) +{ + struct libftdi1_gpio_chip *gpio = + container_of(chip, struct libftdi1_gpio_chip, chip); + + barebox_libftdi1_gpio_set_value(gpio->ftbb, off, value); + barebox_libftdi1_gpio_direction(gpio->ftbb, off, GPIOF_DIR_OUT); + barebox_libftdi1_update(gpio->ftbb); + + return 0; +} + +static int libftdi1_gpio_get_value(struct gpio_chip *chip, unsigned off) +{ + struct libftdi1_gpio_chip *gpio = + container_of(chip, struct libftdi1_gpio_chip, chip); + + return barebox_libftdi1_gpio_get_value(gpio->ftbb, off); +} + +static void libftdi1_gpio_set_value( + struct gpio_chip *chip, unsigned off, int value) +{ + struct libftdi1_gpio_chip *gpio = + container_of(chip, struct libftdi1_gpio_chip, chip); + + barebox_libftdi1_gpio_set_value(gpio->ftbb, off, value); + barebox_libftdi1_update(gpio->ftbb); +} + +static struct gpio_ops libftdi1_gpio_ops = { + .direction_input = libftdi1_gpio_direction_input, + .direction_output = libftdi1_gpio_direction_output, + .get = libftdi1_gpio_get_value, + .set = libftdi1_gpio_set_value, +}; + +static int libftdi1_gpio_probe(struct device_d *dev) +{ + struct libftdi1_gpio_chip *gpio; + struct ft2232_bitbang *ftbb; + int ret; + uint32_t id_vendor, id_product; + const char *i_serial_number = NULL; + + of_property_read_u32(dev->device_node, "usb,id_vendor", + &id_vendor); + + of_property_read_u32(dev->device_node, "usb,id_product", + &id_product); + + of_property_read_string(dev->device_node, "usb,i_serial_number", + &i_serial_number); + + ftbb = barebox_libftdi1_open(id_vendor, id_product, + i_serial_number); + if (!ftbb) + return -EIO; + + gpio = xzalloc(sizeof(*gpio)); + + gpio->ftbb = ftbb; + + gpio->chip.dev = dev; + gpio->chip.ops = &libftdi1_gpio_ops; + gpio->chip.base = 0; + gpio->chip.ngpio = 8; + + ret = gpiochip_add(&gpio->chip); + + dev_dbg(dev, "%d: probed gpio%d with base %d\n", + ret, dev->id, gpio->chip.base); + + return 0; +} + +static __maybe_unused const struct of_device_id libftdi1_gpio_dt_ids[] = { + { + .compatible = "barebox,libftdi1-gpio", + }, { + /* sentinel */ + }, +}; + +static void libftdi1_gpio_remove(struct device_d *dev) +{ + barebox_libftdi1_close(); +} + +static struct driver_d libftdi1_gpio_driver = { + .name = "libftdi1-gpio", + .probe = libftdi1_gpio_probe, + .remove = libftdi1_gpio_remove, + .of_compatible = DRV_OF_COMPAT(libftdi1_gpio_dt_ids), +}; +device_platform_driver(libftdi1_gpio_driver); -- 2.15.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example 2018-01-22 9:59 [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 1/3] sandbox: avoid symbol conflict for {open, read, close}dir Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 2/3] sandbox: add gpio support with libftdi1 Antony Pavlov @ 2018-01-22 9:59 ` Antony Pavlov 2018-01-25 7:12 ` Sascha Hauer 2018-01-24 9:10 ` [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov 3 siblings, 1 reply; 8+ messages in thread From: Antony Pavlov @ 2018-01-22 9:59 UTC (permalink / raw) To: barebox Make necessary changes in sandbox_defconfig: enable gpio, spi, i2c and led stuff. Usage: barebox$ make sandbox_defconfig barebox$ sed -i "s/# CONFIG_GPIO_LIBFTDI1.*$/CONFIG_GPIO_LIBFTDI1=y/" .config # edit arch/sandbox/dts/sandbox-libftdi-example.dtsi barebox$ echo '#include "sandbox-libftdi-example.dtsi"' >> arch/sandbox/dts/sandbox.dts barebox$ make barebox$ sudo ./barebox -d arch/sandbox/dts/sandbox.dtb Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> --- arch/sandbox/configs/sandbox_defconfig | 21 ++++++- arch/sandbox/dts/sandbox-libftdi-example.dtsi | 80 +++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) diff --git a/arch/sandbox/configs/sandbox_defconfig b/arch/sandbox/configs/sandbox_defconfig index dbaff12bfb..4a5b6d6d79 100644 --- a/arch/sandbox/configs/sandbox_defconfig +++ b/arch/sandbox/configs/sandbox_defconfig @@ -53,6 +53,11 @@ CONFIG_CMD_CRC_CMP=y CONFIG_CMD_MM=y CONFIG_CMD_DETECT=y CONFIG_CMD_FLASH=y +CONFIG_CMD_GPIO=y +CONFIG_CMD_I2C=y +CONFIG_CMD_LED=y +CONFIG_CMD_SPI=y +CONFIG_CMD_LED_TRIGGER=y CONFIG_CMD_2048=y CONFIG_CMD_OF_NODE=y CONFIG_CMD_OF_PROPERTY=y @@ -66,10 +71,24 @@ CONFIG_NET_NETCONSOLE=y CONFIG_OFDEVICE=y CONFIG_OF_BAREBOX_DRIVERS=y CONFIG_DRIVER_NET_TAP=y -# CONFIG_SPI is not set +CONFIG_DRIVER_SPI_GPIO=y +CONFIG_I2C=y +CONFIG_I2C_GPIO=y +CONFIG_MTD=y +CONFIG_MTD_M25P80=y CONFIG_VIDEO=y CONFIG_FRAMEBUFFER_CONSOLE=y +CONFIG_LED=y +CONFIG_LED_GPIO=y +CONFIG_LED_GPIO_OF=y +CONFIG_LED_GPIO_RGB=y +CONFIG_LED_GPIO_BICOLOR=y +CONFIG_LED_TRIGGERS=y +CONFIG_EEPROM_AT25=y +CONFIG_EEPROM_AT24=y # CONFIG_PINCTRL is not set +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_DS1307=y CONFIG_FS_CRAMFS=y CONFIG_FS_EXT4=y CONFIG_FS_TFTP=y diff --git a/arch/sandbox/dts/sandbox-libftdi-example.dtsi b/arch/sandbox/dts/sandbox-libftdi-example.dtsi new file mode 100644 index 0000000000..abe3ddf8a0 --- /dev/null +++ b/arch/sandbox/dts/sandbox-libftdi-example.dtsi @@ -0,0 +1,80 @@ +#include <dt-bindings/gpio/gpio.h> + +/ { + gpio0: gpio@0 { + compatible = "barebox,libftdi1-gpio"; + usb,id_vendor = <0x0403>; + usb,id_product = <0x6010>; + + /* + * The serial number can be used to select + * a specific device in case more than + * one is connected to the host. + */ + /* usb,i_serial_number = "20180120"; */ + + /* use ACBUS[7:0] */ + gpio-controller; + #gpio-cells = <2>; + + status = "okay"; + }; + + spi0: spi0 { + compatible = "spi-gpio"; + #address-cells = <1>; + #size-cells = <0>; + + gpio-sck = <&gpio0 0 GPIO_ACTIVE_HIGH>; + gpio-mosi = <&gpio0 1 GPIO_ACTIVE_HIGH>; + gpio-miso = <&gpio0 2 GPIO_ACTIVE_HIGH>; + cs-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>; + + num-chipselects = <1>; + + status = "disabled"; + + m25p128@0 { + compatible = "m25p128", "jedec,spi-nor"; + #address-cells = <1>; + #size-cells = <1>; + reg = <0>; + spi-max-frequency = <1000000>; + }; + }; + + i2c0: i2c0 { + compatible = "i2c-gpio"; + #address-cells = <1>; + #size-cells = <0>; + + gpios = <&gpio0 4 GPIO_ACTIVE_HIGH /* sda */ + &gpio0 5 GPIO_ACTIVE_HIGH /* scl */ + >; + i2c-gpio,scl-output-only; + + status = "disabled"; + + eeprom: at24@50 { + compatible = "atmel,24c32"; + reg = <0x50>; + }; + + rtc: ds1307@68 { + compatible = "dallas,ds1307"; + reg = <0x68>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + status = "disabled"; + + heartbeat-led { + label = "heartbeat"; + gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; + linux,default-trigger = "heartbeat"; + }; + }; +}; -- 2.15.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example 2018-01-22 9:59 ` [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example Antony Pavlov @ 2018-01-25 7:12 ` Sascha Hauer 2018-01-26 8:37 ` Antony Pavlov 0 siblings, 1 reply; 8+ messages in thread From: Sascha Hauer @ 2018-01-25 7:12 UTC (permalink / raw) To: Antony Pavlov; +Cc: barebox On Mon, Jan 22, 2018 at 12:59:18PM +0300, Antony Pavlov wrote: > Make necessary changes in sandbox_defconfig: > enable gpio, spi, i2c and led stuff. > > Usage: > > barebox$ make sandbox_defconfig > barebox$ sed -i "s/# CONFIG_GPIO_LIBFTDI1.*$/CONFIG_GPIO_LIBFTDI1=y/" .config > > # edit arch/sandbox/dts/sandbox-libftdi-example.dtsi > > barebox$ echo '#include "sandbox-libftdi-example.dtsi"' >> arch/sandbox/dts/sandbox.dts > barebox$ make > barebox$ sudo ./barebox -d arch/sandbox/dts/sandbox.dtb > > Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> > --- > arch/sandbox/configs/sandbox_defconfig | 21 ++++++- > arch/sandbox/dts/sandbox-libftdi-example.dtsi | 80 +++++++++++++++++++++++++++ > 2 files changed, 100 insertions(+), 1 deletion(-) > > +++ b/arch/sandbox/dts/sandbox-libftdi-example.dtsi > @@ -0,0 +1,80 @@ > +#include <dt-bindings/gpio/gpio.h> > + > +/ { > + gpio0: gpio@0 { > + compatible = "barebox,libftdi1-gpio"; > + usb,id_vendor = <0x0403>; > + usb,id_product = <0x6010>; > + > + /* > + * The serial number can be used to select > + * a specific device in case more than > + * one is connected to the host. > + */ > + /* usb,i_serial_number = "20180120"; */ > + > + /* use ACBUS[7:0] */ > + gpio-controller; > + #gpio-cells = <2>; > + > + status = "okay"; > + }; > + > + spi0: spi0 { > + compatible = "spi-gpio"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + gpio-sck = <&gpio0 0 GPIO_ACTIVE_HIGH>; > + gpio-mosi = <&gpio0 1 GPIO_ACTIVE_HIGH>; > + gpio-miso = <&gpio0 2 GPIO_ACTIVE_HIGH>; > + cs-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>; > + > + num-chipselects = <1>; > + > + status = "disabled"; Given that this is an example which is not used unless you include it manually I think you can remove the status properties. Otherwise this series looks fine to me. I can remove the properties while applying if you like. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example 2018-01-25 7:12 ` Sascha Hauer @ 2018-01-26 8:37 ` Antony Pavlov 2018-01-29 7:28 ` Sascha Hauer 0 siblings, 1 reply; 8+ messages in thread From: Antony Pavlov @ 2018-01-26 8:37 UTC (permalink / raw) To: Sascha Hauer; +Cc: barebox On Thu, 25 Jan 2018 08:12:36 +0100 Sascha Hauer <s.hauer@pengutronix.de> wrote: > On Mon, Jan 22, 2018 at 12:59:18PM +0300, Antony Pavlov wrote: > > Make necessary changes in sandbox_defconfig: > > enable gpio, spi, i2c and led stuff. > > > > Usage: > > > > barebox$ make sandbox_defconfig > > barebox$ sed -i "s/# CONFIG_GPIO_LIBFTDI1.*$/CONFIG_GPIO_LIBFTDI1=y/" .config > > > > # edit arch/sandbox/dts/sandbox-libftdi-example.dtsi > > > > barebox$ echo '#include "sandbox-libftdi-example.dtsi"' >> arch/sandbox/dts/sandbox.dts > > barebox$ make > > barebox$ sudo ./barebox -d arch/sandbox/dts/sandbox.dtb > > > > Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> > > --- > > arch/sandbox/configs/sandbox_defconfig | 21 ++++++- > > arch/sandbox/dts/sandbox-libftdi-example.dtsi | 80 +++++++++++++++++++++++++++ > > 2 files changed, 100 insertions(+), 1 deletion(-) > > > > +++ b/arch/sandbox/dts/sandbox-libftdi-example.dtsi > > @@ -0,0 +1,80 @@ > > +#include <dt-bindings/gpio/gpio.h> > > + > > +/ { > > + gpio0: gpio@0 { > > + compatible = "barebox,libftdi1-gpio"; > > + usb,id_vendor = <0x0403>; > > + usb,id_product = <0x6010>; > > + > > + /* > > + * The serial number can be used to select > > + * a specific device in case more than > > + * one is connected to the host. > > + */ > > + /* usb,i_serial_number = "20180120"; */ > > + > > + /* use ACBUS[7:0] */ > > + gpio-controller; > > + #gpio-cells = <2>; > > + > > + status = "okay"; > > + }; > > + > > + spi0: spi0 { > > + compatible = "spi-gpio"; > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + gpio-sck = <&gpio0 0 GPIO_ACTIVE_HIGH>; > > + gpio-mosi = <&gpio0 1 GPIO_ACTIVE_HIGH>; > > + gpio-miso = <&gpio0 2 GPIO_ACTIVE_HIGH>; > > + cs-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>; > > + > > + num-chipselects = <1>; > > + > > + status = "disabled"; > > Given that this is an example which is not used unless you include it > manually I think you can remove the status properties. > > Otherwise this series looks fine to me. I can remove the properties > while applying if you like. Without status properties this file will be more fail-safe. Please remove the properties and apply the patches. Please note that this patcheseries does not use parseopt_*() functions so nobody uses the commit 'parseopt: introduce parseopt_u16() and parseopt_str()'. -- Best regards, Antony Pavlov _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example 2018-01-26 8:37 ` Antony Pavlov @ 2018-01-29 7:28 ` Sascha Hauer 0 siblings, 0 replies; 8+ messages in thread From: Sascha Hauer @ 2018-01-29 7:28 UTC (permalink / raw) To: Antony Pavlov; +Cc: barebox On Fri, Jan 26, 2018 at 11:37:46AM +0300, Antony Pavlov wrote: > On Thu, 25 Jan 2018 08:12:36 +0100 > Sascha Hauer <s.hauer@pengutronix.de> wrote: > > > On Mon, Jan 22, 2018 at 12:59:18PM +0300, Antony Pavlov wrote: > > > Make necessary changes in sandbox_defconfig: > > > enable gpio, spi, i2c and led stuff. > > > > > > Usage: > > > > > > barebox$ make sandbox_defconfig > > > barebox$ sed -i "s/# CONFIG_GPIO_LIBFTDI1.*$/CONFIG_GPIO_LIBFTDI1=y/" .config > > > > > > # edit arch/sandbox/dts/sandbox-libftdi-example.dtsi > > > > > > barebox$ echo '#include "sandbox-libftdi-example.dtsi"' >> arch/sandbox/dts/sandbox.dts > > > barebox$ make > > > barebox$ sudo ./barebox -d arch/sandbox/dts/sandbox.dtb > > > > > > Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com> > > > --- > > > arch/sandbox/configs/sandbox_defconfig | 21 ++++++- > > > arch/sandbox/dts/sandbox-libftdi-example.dtsi | 80 +++++++++++++++++++++++++++ > > > 2 files changed, 100 insertions(+), 1 deletion(-) > > > > > > +++ b/arch/sandbox/dts/sandbox-libftdi-example.dtsi > > > @@ -0,0 +1,80 @@ > > > +#include <dt-bindings/gpio/gpio.h> > > > + > > > +/ { > > > + gpio0: gpio@0 { > > > + compatible = "barebox,libftdi1-gpio"; > > > + usb,id_vendor = <0x0403>; > > > + usb,id_product = <0x6010>; > > > + > > > + /* > > > + * The serial number can be used to select > > > + * a specific device in case more than > > > + * one is connected to the host. > > > + */ > > > + /* usb,i_serial_number = "20180120"; */ > > > + > > > + /* use ACBUS[7:0] */ > > > + gpio-controller; > > > + #gpio-cells = <2>; > > > + > > > + status = "okay"; > > > + }; > > > + > > > + spi0: spi0 { > > > + compatible = "spi-gpio"; > > > + #address-cells = <1>; > > > + #size-cells = <0>; > > > + > > > + gpio-sck = <&gpio0 0 GPIO_ACTIVE_HIGH>; > > > + gpio-mosi = <&gpio0 1 GPIO_ACTIVE_HIGH>; > > > + gpio-miso = <&gpio0 2 GPIO_ACTIVE_HIGH>; > > > + cs-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>; > > > + > > > + num-chipselects = <1>; > > > + > > > + status = "disabled"; > > > > Given that this is an example which is not used unless you include it > > manually I think you can remove the status properties. > > > > Otherwise this series looks fine to me. I can remove the properties > > while applying if you like. > > Without status properties this file will be more fail-safe. > Please remove the properties and apply the patches. Just did that. > > Please note that this patcheseries does not use parseopt_*() functions > so nobody uses the commit 'parseopt: introduce parseopt_u16() and parseopt_str()'. That's fine. At least for parseopt_str() it probably won't take long to find a user. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/3] sandbox: add gpio support with libftdi1 2018-01-22 9:59 [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov ` (2 preceding siblings ...) 2018-01-22 9:59 ` [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example Antony Pavlov @ 2018-01-24 9:10 ` Antony Pavlov 3 siblings, 0 replies; 8+ messages in thread From: Antony Pavlov @ 2018-01-24 9:10 UTC (permalink / raw) To: Sascha Hauer; +Cc: barebox On Mon, 22 Jan 2018 12:59:15 +0300 Antony Pavlov <antonynpavlov@gmail.com> wrote: Sascha! Please review this patch series. > This patch series makes it possible to use FT2232H ACBUS[7:0] > pins as gpio pins from sandbox barebox. > > There are ready-to-use FT2232H-based boards: > > * FT2232H-56Q Mini-Module (http://www.ftdichip.com/Products/Modules/DevelopmentModules.htm#FT2232H-56_Mini) > * FT2232 breakout board (http://dangerousprototypes.com/docs/FT2232_breakout_board) > > The main goal of adding gpio functionality to sandbox barebox > is using it for connecting real i2c and spi devices to sandbox barebox. > > Sample dts-file for at24 i2c eeprom and at25 spi flash is included. > > Changes since v2 patch series (http://lists.infradead.org/pipermail/barebox/2018-January/031887.html): > > * ftdi USB IDs are moved to dts, parseopt_* functions are unused; > * dts stuff moved to sandbox-libftdi-example.dtsi; > * led example is added. > > Changes since v1 patch series (http://lists.infradead.org/pipermail/barebox/2017-October/031306.html): > > * rebase on top barebox v2017.12.0; > * ds1307 i2c rtc driver works fine (i2c-gpio,scl-output-only is used); > * parseopt_* functions are used for cmdline parsing. > > Changes since RFC v1 patch series (http://lists.infradead.org/pipermail/barebox/2017-February/029106.html): > > * rebase on top barebox v2017.10.0; > * libftdi cmdline options are added; > * device tree support is added. > > Antony Pavlov (3): > sandbox: avoid symbol conflict for {open,read,close}dir > sandbox: add gpio support with libftdi1 > sandbox: add i2c and spi libftdi1 bit-bang example > > arch/sandbox/Kconfig | 1 + > arch/sandbox/Makefile | 10 +- > arch/sandbox/configs/sandbox_defconfig | 21 +++- > arch/sandbox/dts/sandbox-libftdi-example.dtsi | 80 +++++++++++++ > arch/sandbox/mach-sandbox/include/mach/linux.h | 12 ++ > arch/sandbox/os/Makefile | 3 + > arch/sandbox/os/ftdi.c | 154 +++++++++++++++++++++++++ > drivers/gpio/Kconfig | 4 + > drivers/gpio/Makefile | 1 + > drivers/gpio/gpio-libftdi1.c | 137 ++++++++++++++++++++++ > 10 files changed, 420 insertions(+), 3 deletions(-) > create mode 100644 arch/sandbox/dts/sandbox-libftdi-example.dtsi > create mode 100644 arch/sandbox/os/ftdi.c > create mode 100644 drivers/gpio/gpio-libftdi1.c > > -- > 2.15.1 > -- Best regards, Antony Pavlov _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2018-01-29 7:29 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-01-22 9:59 [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 1/3] sandbox: avoid symbol conflict for {open, read, close}dir Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 2/3] sandbox: add gpio support with libftdi1 Antony Pavlov 2018-01-22 9:59 ` [PATCH v3 3/3] sandbox: add i2c and spi libftdi1 bit-bang example Antony Pavlov 2018-01-25 7:12 ` Sascha Hauer 2018-01-26 8:37 ` Antony Pavlov 2018-01-29 7:28 ` Sascha Hauer 2018-01-24 9:10 ` [PATCH v3 0/3] sandbox: add gpio support with libftdi1 Antony Pavlov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox