forked from Imagelibrary/rtems
libchip: Add I2C SEMTECH SC620 octal LED driver
This commit is contained in:
@@ -67,6 +67,7 @@ EXTRA_DIST += rtc/README.ds1643 rtc/README.icm7170 rtc/README.m48t08 \
|
|||||||
# i2c
|
# i2c
|
||||||
include_libchip_HEADERS += i2c/i2c-ds1621.h \
|
include_libchip_HEADERS += i2c/i2c-ds1621.h \
|
||||||
i2c/i2c-2b-eeprom.h \
|
i2c/i2c-2b-eeprom.h \
|
||||||
|
i2c/i2c-sc620.h \
|
||||||
i2c/spi-memdrv.h \
|
i2c/spi-memdrv.h \
|
||||||
i2c/spi-flash-m25p40.h \
|
i2c/spi-flash-m25p40.h \
|
||||||
i2c/spi-fram-fm25l256.h \
|
i2c/spi-fram-fm25l256.h \
|
||||||
@@ -82,6 +83,7 @@ libi2cio_a_SOURCES = i2c/i2c-ds1621.h \
|
|||||||
i2c/spi-fram-fm25l256.h \
|
i2c/spi-fram-fm25l256.h \
|
||||||
i2c/i2c-ds1621.c \
|
i2c/i2c-ds1621.c \
|
||||||
i2c/i2c-2b-eeprom.c \
|
i2c/i2c-2b-eeprom.c \
|
||||||
|
i2c/i2c-sc620.c \
|
||||||
i2c/spi-memdrv.c \
|
i2c/spi-memdrv.c \
|
||||||
i2c/spi-flash-m25p40.c \
|
i2c/spi-flash-m25p40.c \
|
||||||
i2c/spi-fram-fm25l256.c \
|
i2c/spi-fram-fm25l256.c \
|
||||||
|
|||||||
95
c/src/libchip/i2c/i2c-sc620.c
Normal file
95
c/src/libchip/i2c/i2c-sc620.c
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* @brief I2C Driver for SEMTECH SC620 Octal LED Driver
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2013 embedded brains GmbH. All rights reserved.
|
||||||
|
*
|
||||||
|
* embedded brains GmbH
|
||||||
|
* Obere Lagerstr. 30
|
||||||
|
* 82178 Puchheim
|
||||||
|
* Germany
|
||||||
|
* <rtems@embedded-brains.de>
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <libchip/i2c-sc620.h>
|
||||||
|
|
||||||
|
#include <rtems/libio.h>
|
||||||
|
|
||||||
|
#define SC620_REG_COUNT 10
|
||||||
|
|
||||||
|
static rtems_status_code i2c_sc620_write(
|
||||||
|
rtems_device_major_number major,
|
||||||
|
rtems_device_minor_number minor,
|
||||||
|
void *arg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
rtems_status_code sc = RTEMS_IO_ERROR;
|
||||||
|
rtems_libio_rw_args_t *rw = arg;
|
||||||
|
unsigned char *buf = (unsigned char *) &rw->buffer[0];
|
||||||
|
|
||||||
|
if (rw->count == 2 && buf[0] < SC620_REG_COUNT) {
|
||||||
|
int rv;
|
||||||
|
|
||||||
|
rv = rtems_libi2c_start_write_bytes(
|
||||||
|
minor, buf, 2
|
||||||
|
);
|
||||||
|
if (rv == 2) {
|
||||||
|
sc = rtems_libi2c_send_stop(minor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rw->bytes_moved = sc == RTEMS_SUCCESSFUL ? 2 : 0;
|
||||||
|
|
||||||
|
return sc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rtems_status_code i2c_sc620_read(
|
||||||
|
rtems_device_major_number major,
|
||||||
|
rtems_device_minor_number minor,
|
||||||
|
void *arg
|
||||||
|
)
|
||||||
|
{
|
||||||
|
rtems_status_code sc = RTEMS_IO_ERROR;
|
||||||
|
rtems_libio_rw_args_t *rw = arg;
|
||||||
|
unsigned char *buf = (unsigned char *) &rw->buffer[0];
|
||||||
|
|
||||||
|
if (rw->count == 1 && buf[0] < SC620_REG_COUNT) {
|
||||||
|
int rv;
|
||||||
|
|
||||||
|
rv = rtems_libi2c_start_write_bytes(minor, buf, 1);
|
||||||
|
if (rv == 1) {
|
||||||
|
sc = rtems_libi2c_send_addr(minor, 0);
|
||||||
|
if (sc == RTEMS_SUCCESSFUL) {
|
||||||
|
rv = rtems_libi2c_read_bytes(minor, buf, 1);
|
||||||
|
if (rv == 1) {
|
||||||
|
sc = rtems_libi2c_send_stop(minor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rw->bytes_moved = sc == RTEMS_SUCCESSFUL ? 1 : 0;
|
||||||
|
|
||||||
|
return sc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rtems_driver_address_table i2c_sc620_ops = {
|
||||||
|
.read_entry = i2c_sc620_read,
|
||||||
|
.write_entry = i2c_sc620_write
|
||||||
|
};
|
||||||
|
|
||||||
|
rtems_libi2c_drv_t i2c_sc620_driver = {
|
||||||
|
.ops = &i2c_sc620_ops,
|
||||||
|
.size = sizeof(i2c_sc620_driver)
|
||||||
|
};
|
||||||
40
c/src/libchip/i2c/i2c-sc620.h
Normal file
40
c/src/libchip/i2c/i2c-sc620.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2013 embedded brains GmbH. All rights reserved.
|
||||||
|
*
|
||||||
|
* embedded brains GmbH
|
||||||
|
* Dornierstr. 4
|
||||||
|
* 82178 Puchheim
|
||||||
|
* Germany
|
||||||
|
* <rtems@embedded-brains.de>
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.rtems.com/license/LICENSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef I2C_SC620_H
|
||||||
|
#define I2C_SC620_H
|
||||||
|
|
||||||
|
#include <rtems/libi2c.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief I2C driver for SEMTECH SC620 octal LED driver.
|
||||||
|
*
|
||||||
|
* A write() must use two character buffer. The buffer[0] value specifies the
|
||||||
|
* register and the buffer[1] value specifies the register data.
|
||||||
|
*
|
||||||
|
* A read() must use a one character buffer. The buffer[0] value specifies the
|
||||||
|
* register on function entry. The buffer[0] value contains the register value
|
||||||
|
* after a successful operation.
|
||||||
|
*/
|
||||||
|
extern rtems_libi2c_drv_t i2c_sc620_driver;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* I2C_SC620_H */
|
||||||
@@ -126,6 +126,10 @@ $(PROJECT_INCLUDE)/libchip/i2c-2b-eeprom.h: i2c/i2c-2b-eeprom.h $(PROJECT_INCLUD
|
|||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/i2c-2b-eeprom.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/i2c-2b-eeprom.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/i2c-2b-eeprom.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/i2c-2b-eeprom.h
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE)/libchip/i2c-sc620.h: i2c/i2c-sc620.h $(PROJECT_INCLUDE)/libchip/$(dirstamp)
|
||||||
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/i2c-sc620.h
|
||||||
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/i2c-sc620.h
|
||||||
|
|
||||||
$(PROJECT_INCLUDE)/libchip/spi-memdrv.h: i2c/spi-memdrv.h $(PROJECT_INCLUDE)/libchip/$(dirstamp)
|
$(PROJECT_INCLUDE)/libchip/spi-memdrv.h: i2c/spi-memdrv.h $(PROJECT_INCLUDE)/libchip/$(dirstamp)
|
||||||
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/spi-memdrv.h
|
$(INSTALL_DATA) $< $(PROJECT_INCLUDE)/libchip/spi-memdrv.h
|
||||||
PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/spi-memdrv.h
|
PREINSTALL_FILES += $(PROJECT_INCLUDE)/libchip/spi-memdrv.h
|
||||||
|
|||||||
Reference in New Issue
Block a user