Private
Public Access
2
0

Fixing minor issues. supporting LEC-AL-AI board

Signed-off-by: katha ashok <katha.ashok@adlinktech.com>
This commit is contained in:
katha ashok
2020-01-03 05:22:44 +00:00
committed by Tom Ingleby
parent eb9b55bd99
commit ef8c0fb541
3 changed files with 65 additions and 118 deletions

View File

@@ -157,54 +157,9 @@ static mraa_result_t pwm_init_raw_replace(mraa_pwm_context dev, int pin)
{
char buffer[100] = {0};
int i, fd;
syslog(LOG_WARNING, "pwm_init: pwm%i. chip info %d.", pin, dev->chipid);
if(dev->chipid == 1 || dev->chipid == 2)
if(dev->chipid == 3)
{
dev->advance_func->pwm_period_replace = NULL;
dev->advance_func->pwm_read_replace = NULL;
dev->advance_func->pwm_write_replace = NULL;
dev->advance_func->pwm_enable_replace = NULL;
char directory[MAX_SIZE];
snprintf(directory, MAX_SIZE, SYSFS_PWM "/pwmchip%d/pwm%d", dev->chipid, dev->pin);
struct stat dir;
if (stat(directory, &dir) == 0 && S_ISDIR(dir.st_mode)) {
syslog(LOG_NOTICE, "pwm_init: pwm%i already exported, continuing", pin);
dev->owner = 0; // Not Owner
} else {
char buffer[MAX_SIZE];
snprintf(buffer, MAX_SIZE, "/sys/class/pwm/pwmchip%d/export", dev->chipid);
int export_f = open(buffer, O_WRONLY);
if (export_f == -1) {
syslog(LOG_ERR, "pwm_init: pwm%i. Failed to open export for writing: %s", pin, strerror(errno));
free(dev);
return MRAA_ERROR_INVALID_RESOURCE;
}
char out[MAX_SIZE];
int size = snprintf(out, MAX_SIZE, "%d", dev->pin);
if (write(export_f, out, size * sizeof(char)) == -1) {
syslog(LOG_WARNING, "pwm_init: pwm%i. Failed to write to export! (%s) Potentially already in use.", pin, strerror(errno));
close(export_f);
free(dev);
return MRAA_ERROR_INVALID_RESOURCE;
}
dev->owner = 1;
mraa_pwm_period_us(dev, 0xFF);
close(export_f);
}
mraa_pwm_setup_duty_fp(dev);
return MRAA_SUCCESS;
}else if(dev->chipid == 3)
{
dev->advance_func->pwm_period_replace = pwm_period_replace;
dev->advance_func->pwm_read_replace = pwm_read_replace;
dev->advance_func->pwm_write_replace = pwm_write_replace;
dev->advance_func->pwm_enable_replace = pwm_enable_replace;
if(pin < 9)
{
if(sx150x_pwm_init(pin))
@@ -534,62 +489,42 @@ mraa_adlink_ipi()
b->pins[2].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 };
strncpy(b->pins[3].name, "I2C1_SDA", MRAA_PIN_NAME_SIZE); // GPIO0_C3
b->pins[3].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 };
b->pins[3].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 };
b->pins[3].gpio.pinmap = 19;
strncpy(b->pins[4].name, "5V", MRAA_PIN_NAME_SIZE);
b->pins[4].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 };
strncpy(b->pins[5].name, "I2C1_SCL", MRAA_PIN_NAME_SIZE); // GPIO0_C2
b->pins[5].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 };
b->pins[5].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 };
b->pins[5].gpio.pinmap = 18;
strncpy(b->pins[6].name, "GND", MRAA_PIN_NAME_SIZE);
b->pins[6].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 };
if (pwm0 == 0) {
strncpy(b->pins[7].name, "PWM6", MRAA_PIN_NAME_SIZE); // PWM6
b->pins[7].capabilities = (mraa_pincapabilities_t){ 1, 0, 1, 0, 0, 0, 0, 0 };
} else {
strncpy(b->pins[7].name, "GPIO3_C4", MRAA_PIN_NAME_SIZE); // GPIO3_C4
b->pins[7].capabilities = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 };
}
b->pins[7].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[7].gpio.pinmap = 116;
b->pins[7].pwm.pinmap = 0;
b->pins[7].pwm.parent_id = 1;
b->pins[7].pwm.mux_total = 0;
b->pwm_dev_count++;
strncpy(b->pins[8].name, "UART0_TX", MRAA_PIN_NAME_SIZE); // GPIO0_B2
b->pins[8].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 };
b->pins[8].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 1 };
b->pins[8].gpio.pinmap = 10;
strncpy(b->pins[9].name, "GND", MRAA_PIN_NAME_SIZE);
b->pins[9].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 };
strncpy(b->pins[10].name, "UART0_RX", MRAA_PIN_NAME_SIZE); // GPIO0_B3
b->pins[10].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 1 };
b->pins[10].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 1 };
b->pins[10].gpio.pinmap = 11;
strncpy(b->pins[11].name, "GPIO3_C6", MRAA_PIN_NAME_SIZE); // GPIO3_C6
b->pins[11].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[11].gpio.pinmap = 118;
if (pwm1 == 1) {
strncpy(b->pins[12].name, "PWM7", MRAA_PIN_NAME_SIZE); // PWM7
b->pins[12].capabilities = (mraa_pincapabilities_t){ 1, 0, 1, 0, 0, 0, 0, 0 };
} else {
strncpy(b->pins[12].name, "GPIO3_C5", MRAA_PIN_NAME_SIZE); // GPIO3_C5
b->pins[12].capabilities = (mraa_pincapabilities_t){ 1, 1, 1, 0, 0, 0, 0, 0 };
}
b->pins[12].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[12].gpio.pinmap = 117;
b->pins[12].pwm.pinmap = 0;
b->pins[12].pwm.parent_id = 2;
b->pins[12].pwm.mux_total = 0;
b->pwm_dev_count++;
strncpy(b->pins[13].name, "GPIO3_B3", MRAA_PIN_NAME_SIZE); // GPIO3_B3
b->pins[13].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 0, 0, 0 };
b->pins[13].gpio.pinmap = 107;
@@ -613,14 +548,14 @@ mraa_adlink_ipi()
b->pins[18].gpio.pinmap = 121;
strncpy(b->pins[19].name, "SPI0_MOSI", MRAA_PIN_NAME_SIZE); // GPIO1_B4
b->pins[19].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[19].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 };
b->pins[19].gpio.pinmap = 44;
strncpy(b->pins[20].name, "GND", MRAA_PIN_NAME_SIZE);
b->pins[20].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 0, 0, 0 };
strncpy(b->pins[21].name, "SPI0_MISO", MRAA_PIN_NAME_SIZE); // GPIO1_B5
b->pins[21].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[21].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 };
b->pins[21].gpio.pinmap = 45;
strncpy(b->pins[22].name, "GPIO3_D2", MRAA_PIN_NAME_SIZE); // GPIO3_D2
@@ -628,11 +563,11 @@ mraa_adlink_ipi()
b->pins[22].gpio.pinmap = 122;
strncpy(b->pins[23].name, "SPI0_CLK", MRAA_PIN_NAME_SIZE); // GPIO1_B7
b->pins[23].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[23].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 };
b->pins[23].gpio.pinmap = 47;
strncpy(b->pins[24].name, "SPI0_CSN", MRAA_PIN_NAME_SIZE); // GPIO1_B6
b->pins[24].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 1, 0, 0, 0 };
b->pins[24].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 1, 0, 0, 0 };
b->pins[24].gpio.pinmap = 46;
strncpy(b->pins[25].name, "GND", MRAA_PIN_NAME_SIZE);
@@ -642,11 +577,11 @@ mraa_adlink_ipi()
b->pins[26].capabilities = (mraa_pincapabilities_t){ 0, 0, 0, 0, 0, 0, 0, 0 };
strncpy(b->pins[27].name, "I2C0_SDA", MRAA_PIN_NAME_SIZE); // GPIO0_B1
b->pins[27].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 };
b->pins[27].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 };
b->pins[27].gpio.pinmap = 9;
strncpy(b->pins[28].name, "I2C0_SCL", MRAA_PIN_NAME_SIZE); // GPIO0_B0
b->pins[28].capabilities = (mraa_pincapabilities_t){ 1, 1, 0, 0, 0, 1, 0, 0 };
b->pins[28].capabilities = (mraa_pincapabilities_t){ 1, 0, 0, 0, 0, 1, 0, 0 };
b->pins[28].gpio.pinmap = 8;
strncpy(b->pins[29].name, "EGPIO1_0", MRAA_PIN_NAME_SIZE); // Expander GPIO

View File

@@ -64,6 +64,8 @@ struct intr_list {
static unsigned char regIon[16] = {0x2A, 0x2D, 0x30, 0x33, 0x36, 0x3B, 0x40, 0x45, 0x4A, 0x4D, 0x50, 0x53, 0x56, 0x5B, 0x60, 0x65};
static unsigned int IonValue[16] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
static struct intr_list *list;
mraa_result_t gpio_intr_init_pre(int pin);
static int sx150x_pwm_init(int pin);
@@ -127,29 +129,29 @@ static float pwm_read_replace(mraa_pwm_context dev)
{
if(read(_fd, &(rx_tx_buf[1]), 1) == 1)
{
return ((rx_tx_buf[1] / 2.55)* 2000);
return (rx_tx_buf[1] / 2.55);
}
}
}
return 0;
}
static mraa_result_t pwm_write_replace(mraa_pwm_context dev, float duty)
{
unsigned char rx_tx_buf[3] = {0};
duty = duty / 2000;
IonValue[dev->pin] = ((duty /m_period) * 255);
if(dev->pin < 9)
{
duty = duty * 2.55;
if(_fd == -1)
{
return MRAA_ERROR_INVALID_RESOURCE;
}
rx_tx_buf[0] = regIon[dev->pin];
rx_tx_buf[1] = duty;
rx_tx_buf[1] = IonValue[dev->pin];
if(write(_fd, &(rx_tx_buf[0]), 2) != 2)
{
@@ -828,6 +830,7 @@ static mraa_result_t gpio_init_pre(int pin)
mraa_board_t* mraa_lec_al_board()
{
int i, fd, i2c_bus_num;
int lecalai = -1;
char buffer[60] = {0}, *line = NULL;
FILE *fh;
size_t len;
@@ -841,11 +844,13 @@ mraa_board_t* mraa_lec_al_board()
if((fh = fopen("/sys/devices/virtual/dmi/id/product_name", "r")) != NULL) {
if (getline(&line, &len, fh) != -1) {
line[strcspn(line, "\r\n")] = 0;
if ((strncasecmp(line, "LEC-ALAI", strlen("LEC-ALAI") + 1) == 0)) {
if ((strncasecmp(line, "LEC-AL-AI", strlen("LEC-AL-AI") + 1) == 0)) {
b->platform_name = PLATFORM_NAME_AI;
lecalai = 1;
}
else
{
lecalai = 0;
b->platform_name = PLATFORM_NAME;
}
}
@@ -1024,7 +1029,14 @@ mraa_board_t* mraa_lec_al_board()
b->i2c_bus_count++;
}
if(lecalai == 1)
{
i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:16.3", "i2c_designware.3");
}
else if(lecalai == 0)
{
i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:1f.1", ".");
}
if (i2c_bus_num != -1) {
b->i2c_bus[1].bus_id = i2c_bus_num;
mraa_lec_al_get_pin_index(b, "I2C0_DAT", (int*) &(b->i2c_bus[0].sda));

View File

@@ -126,7 +126,7 @@ mraa_x86_platform()
if( (fd = open("/sys/devices/virtual/dmi/id/product_name", O_RDONLY)) != -1) {
syslog(LOG_ERR, "Checking additional Platform support for LEC-AL iPI");
if(read(fd, buffer, 10) > 0) {
if ((strncasecmp(buffer, "LEC-ALAI", strlen("LEC-ALAI")) == 0)) {
if ((strncasecmp(buffer, "LEC-AL-AI", strlen("LEC-AL-AI")) == 0)) {
syslog(LOG_ERR, "LEC-AL AI IPi found. starting MRAA");
platform_type = MRAA_ADLINK_LEC_AL_AI;
plat = mraa_lec_al_board();