From ef8c0fb54127926dca42535d0ac03fa51e5b8ac7 Mon Sep 17 00:00:00 2001 From: katha ashok Date: Fri, 3 Jan 2020 05:22:44 +0000 Subject: [PATCH] Fixing minor issues. supporting LEC-AL-AI board Signed-off-by: katha ashok --- src/arm/adlink_ipi.c | 95 +++++++------------------------------------- src/x86/adlink-ipi.c | 86 ++++++++++++++++++++++----------------- src/x86/x86.c | 2 +- 3 files changed, 65 insertions(+), 118 deletions(-) diff --git a/src/arm/adlink_ipi.c b/src/arm/adlink_ipi.c index 8b6dc7c..af6f105 100644 --- a/src/arm/adlink_ipi.c +++ b/src/arm/adlink_ipi.c @@ -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 }; - } + strncpy(b->pins[7].name, "GPIO3_C4", MRAA_PIN_NAME_SIZE); // GPIO3_C4 + 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 }; - } + strncpy(b->pins[12].name, "GPIO3_C5", MRAA_PIN_NAME_SIZE); // GPIO3_C5 + 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 diff --git a/src/x86/adlink-ipi.c b/src/x86/adlink-ipi.c index 1c0ee63..d5b1e98 100644 --- a/src/x86/adlink-ipi.c +++ b/src/x86/adlink-ipi.c @@ -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); @@ -113,51 +115,51 @@ static mraa_result_t pwm_period_replace(mraa_pwm_context dev, int period) static float pwm_read_replace(mraa_pwm_context dev) { - unsigned char rx_tx_buf[3] = {0}; + unsigned char rx_tx_buf[3] = {0}; - if(dev->pin < 9) - { - if(_fd == -1) - { - return 0; - } + if(dev->pin < 9) + { + if(_fd == -1) + { + return 0; + } - rx_tx_buf[0] = regIon[dev->pin]; - if(write(_fd, &(rx_tx_buf[0]), 1) == 1) - { - if(read(_fd, &(rx_tx_buf[1]), 1) == 1) - { - return ((rx_tx_buf[1] / 2.55)* 2000); - } - } - } - return 0; + rx_tx_buf[0] = regIon[dev->pin]; + if(write(_fd, &(rx_tx_buf[0]), 1) == 1) + { + if(read(_fd, &(rx_tx_buf[1]), 1) == 1) + { + 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}; + 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; - } + if(dev->pin < 9) + { + if(_fd == -1) + { + return MRAA_ERROR_INVALID_RESOURCE; + } - rx_tx_buf[0] = regIon[dev->pin]; - rx_tx_buf[1] = duty; + rx_tx_buf[0] = regIon[dev->pin]; + rx_tx_buf[1] = IonValue[dev->pin]; - if(write(_fd, &(rx_tx_buf[0]), 2) != 2) - { - return MRAA_ERROR_NO_RESOURCES; - } - return MRAA_SUCCESS; - } - return MRAA_ERROR_NO_RESOURCES; + if(write(_fd, &(rx_tx_buf[0]), 2) != 2) + { + return MRAA_ERROR_NO_RESOURCES; + } + return MRAA_SUCCESS; + } + return MRAA_ERROR_NO_RESOURCES; } static mraa_result_t pwm_enable_replace(mraa_pwm_context dev, int enable) @@ -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++; } - i2c_bus_num = mraa_find_i2c_bus_pci("0000:00", "0000:00:1f.1", "."); + 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)); diff --git a/src/x86/x86.c b/src/x86/x86.c index e215154..262682d 100644 --- a/src/x86/x86.c +++ b/src/x86/x86.c @@ -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();