diff options
16 files changed, 0 insertions, 2172 deletions
diff --git a/meta-baldeagle/recipes-applications/rtc-test/files/rtc-test.c b/common/recipes-applications/rtc-test/files/rtc-test.c index 08088544..08088544 100644 --- a/meta-baldeagle/recipes-applications/rtc-test/files/rtc-test.c +++ b/common/recipes-applications/rtc-test/files/rtc-test.c diff --git a/meta-baldeagle/recipes-applications/rtc-test/rtc-test_1.0.bb b/common/recipes-applications/rtc-test/rtc-test_1.0.bb index 868c63c9..868c63c9 100644 --- a/meta-baldeagle/recipes-applications/rtc-test/rtc-test_1.0.bb +++ b/common/recipes-applications/rtc-test/rtc-test_1.0.bb diff --git a/meta-baldeagle/recipes-applications/smbus-test/files/LICENSE b/common/recipes-applications/smbus-test/files/LICENSE index d159169d..d159169d 100644 --- a/meta-baldeagle/recipes-applications/smbus-test/files/LICENSE +++ b/common/recipes-applications/smbus-test/files/LICENSE diff --git a/meta-baldeagle/recipes-applications/smbus-test/files/i2c-dev.h b/common/recipes-applications/smbus-test/files/i2c-dev.h index b9358174..b9358174 100644 --- a/meta-baldeagle/recipes-applications/smbus-test/files/i2c-dev.h +++ b/common/recipes-applications/smbus-test/files/i2c-dev.h diff --git a/meta-baldeagle/recipes-applications/smbus-test/files/smbus-test.c b/common/recipes-applications/smbus-test/files/smbus-test.c index 128c5391..128c5391 100644 --- a/meta-baldeagle/recipes-applications/smbus-test/files/smbus-test.c +++ b/common/recipes-applications/smbus-test/files/smbus-test.c diff --git a/meta-baldeagle/recipes-applications/smbus-test/smbus-test_1.0.bb b/common/recipes-applications/smbus-test/smbus-test_1.0.bb index 2347b74d..2347b74d 100644 --- a/meta-baldeagle/recipes-applications/smbus-test/smbus-test_1.0.bb +++ b/common/recipes-applications/smbus-test/smbus-test_1.0.bb diff --git a/meta-baldeagle/recipes-applications/watchdog-test/files/watchdog-test.c b/common/recipes-applications/watchdog-test/files/watchdog-test.c index 77124784..77124784 100644 --- a/meta-baldeagle/recipes-applications/watchdog-test/files/watchdog-test.c +++ b/common/recipes-applications/watchdog-test/files/watchdog-test.c diff --git a/meta-baldeagle/recipes-applications/watchdog-test/watchdog-test_1.0.bb b/common/recipes-applications/watchdog-test/watchdog-test_1.0.bb index 43d511d0..43d511d0 100644 --- a/meta-baldeagle/recipes-applications/watchdog-test/watchdog-test_1.0.bb +++ b/common/recipes-applications/watchdog-test/watchdog-test_1.0.bb diff --git a/meta-steppeeagle/recipes-applications/rtc-test/files/rtc-test.c b/meta-steppeeagle/recipes-applications/rtc-test/files/rtc-test.c deleted file mode 100644 index 08088544..00000000 --- a/meta-steppeeagle/recipes-applications/rtc-test/files/rtc-test.c +++ /dev/null @@ -1,505 +0,0 @@ -/***************************************************************************** -* -* Copyright (c) 2014, Advanced Micro Devices, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of Advanced Micro Devices, Inc. nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -***************************************************************************/ -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <fcntl.h> -#include <signal.h> -#include <errno.h> -#include <string.h> -#include <linux/rtc.h> - -#include <readline/readline.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <sys/ioctl.h> - -#define RTC_APP_VERSION "0.1" -static const char *rtc = "/dev/rtc0"; -static int rtc_fd; -static int signal_recvd; -static volatile int loop; - -char *show_prompt(void) -{ - return "$ "; -} - -void sighandler(int sig) -{ - printf("\n%s", show_prompt()); -} - -void periodicinthandler(int sig) -{ - int ret; - - fprintf(stderr, "\nAborting...\n"); - fflush(stderr); - - loop = 0; - - /* Turn off periodic interrupts */ - ret = ioctl(rtc_fd, RTC_PIE_OFF, 0); - if (ret == -1) - perror("RTC_PIE_OFF ioctl"); - - /* Restore original handler for SIGINT */ - signal(SIGINT, sighandler); -} - -void updateinthandler(int sig) -{ - int ret; - - fprintf(stderr, "\nAborting...\n"); - fflush(stderr); - - loop = 0; - - /* Turn off update interrupt */ - ret = ioctl(rtc_fd, RTC_UIE_OFF, 0); - if (ret == -1) - perror("RTC_UIE_OFF ioctl"); - - /* Restore original handler for SIGINT */ - signal(SIGINT, sighandler); -} - -void alarminthandler(int sig) -{ - struct rtc_wkalrm rtc_wakealarm; - int ret; - - signal_recvd = 1; - - ret = ioctl(rtc_fd, RTC_WKALM_RD, &rtc_wakealarm); - if (ret == -1) { - perror("RTC_WKALM_RD ioctl"); - return; - } - - /* disable alarm and set pending to 0 */ - rtc_wakealarm.enabled = 0; - rtc_wakealarm.pending = 0; - - ret = ioctl(rtc_fd, RTC_WKALM_SET, &rtc_wakealarm); - if (ret == -1) { - perror("RTC_WKALM_SET ioctl"); - return; - } - - /* Restore original handler for SIGINT */ - signal(SIGINT, sighandler); -} - -void show_license(void) -{ - printf("/*****************************************************************************\n" - "*\n" - "* Copyright (c) 2014, Advanced Micro Devices, Inc.\n" - "* All rights reserved.\n" - "*\n" - "* Redistribution and use in source and binary forms, with or without\n" - "* modification, are permitted provided that the following conditions are met:\n" - "* * Redistributions of source code must retain the above copyright\n" - "* notice, this list of conditions and the following disclaimer.\n" - "* * Redistributions in binary form must reproduce the above copyright\n" - "* notice, this list of conditions and the following disclaimer in the\n" - "* documentation and/or other materials provided with the distribution.\n" - "* * Neither the name of Advanced Micro Devices, Inc. nor the names of\n" - "* its contributors may be used to endorse or promote products derived\n" - "* from this software without specific prior written permission.\n" - "*\n" - "* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n" - "* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n" - "* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" - "* DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY\n" - "* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n" - "* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n" - "* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n" - "* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" - "* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n" - "* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" - "*\n" - "*\n" - "***************************************************************************/\n"); -} - -void print_usage(void) -{ - printf("\nCommands Supported ->\n"); - printf(" updateinton : Turns on update interrupt\n"); - printf(" updateintoff : Turns off update interrupt\n"); - printf(" getrtctime : Reads the current RTC time\n"); - printf(" setrtctime <date>, <time> : Sets RTC date and time. Both date and time are mandatory\n"); - printf(" getwakealarm : Reads the current alarm setting\n"); - printf(" setwakealarm <date>, <time> : Sets the alarm date and time. Both date and time are mandatory\n"); - printf(" wakealarmoff : Turn off wakeup alarm set previously\n"); - printf(" getperiodicrate : Reads the current periodic interrupt rate\n"); - printf(" setperiodicrate <rate> : Sets the periodic interrupt rate\n"); - printf(" : The rate can take values from 2 to 8192 in steps of " - "power of 2\n"); - printf(" : 2, 4, 8, ..., 8192\n"); - printf(" periodicinton : Turns on periodic interrupt\n"); - printf(" periodicintoff : Turns off periodic interrupt\n"); - printf(" license : Displays the terms of LICENSE for this application\n"); - printf(" help : Displays help text\n"); - printf(" exit : Exits the application\n\n"); -} - -void parse_cmd(const char *cmdline) -{ - int ret, irqcount = 0; - unsigned long data; - struct rtc_time rtc_time; - struct rtc_wkalrm rtc_wakealarm; - - if (strncmp(cmdline, "help", 4) == 0) - print_usage(); - else if (strncmp(cmdline, "updateinton", 11) == 0) { - int i; - - ret = ioctl(rtc_fd, RTC_UIE_ON, 0); - if (ret == -1) { - if (errno == ENOTTY) - fprintf(stderr, "\n..Update interrupt not supported.\n"); - - perror("RTC_UIE_ON ioctl"); - return; - } - - fprintf(stderr, "Counting update interrupts by reading %s...Press Ctrl+C to abort\n", rtc); - fflush(stderr); - - /* Set default handler for SIGINT */ - signal(SIGINT, updateinthandler); - - i = loop = 1; - while (loop) { - struct timeval tv = {5, 0}; - fd_set readfds; - - FD_ZERO(&readfds); - FD_SET(rtc_fd, &readfds); - - ret = select(rtc_fd + 1, &readfds, NULL, NULL, &tv); - if (ret == -1) { - if (errno != EINTR) - perror("select"); - - /* Break the loop */ - loop = 0; - } else { - /* Non blocking read */ - ret = read(rtc_fd, &data, sizeof(unsigned long)); - if (ret == -1) { - perror("read"); - loop = 0; - } else { - fprintf(stderr, " %d", i++); - irqcount++; - } - } - } - - /* Turn off update interrupt */ - ret = ioctl(rtc_fd, RTC_UIE_OFF, 0); - if (ret == -1) - perror("RTC_UIE_OFF ioctl"); - } else if (strncmp(cmdline, "updateintoff", 12) == 0) { - fprintf(stderr, "Turning update interrupt off\n"); - fflush(stderr); - - ret = ioctl(rtc_fd, RTC_UIE_OFF, 0); - if (ret == -1) - perror("RTC_UIE_OFF ioctl"); - } else if (strncmp(cmdline, "getrtctime", 10) == 0) { - ret = ioctl(rtc_fd, RTC_RD_TIME, &rtc_time); - if (ret == -1) - perror("RTC_RD_TIME ioctl"); - else - fprintf(stderr, "\nCurrent RTC date and time is %02d/%02d/%04d, %02d:%02d:%02d\n", - rtc_time.tm_mon + 1, rtc_time.tm_mday, rtc_time.tm_year + 1900, - rtc_time.tm_hour, rtc_time.tm_min, rtc_time.tm_sec); - } else if (strncmp(cmdline, "setrtctime", 10) == 0) { - /* Point past the string and one whitespace */ - cmdline += 11; - ret = sscanf(cmdline, "%02d/%02d/%04d, %02d:%02d:%02d", &rtc_time.tm_mon, &rtc_time.tm_mday, - &rtc_time.tm_year, &rtc_time.tm_hour, &rtc_time.tm_min, &rtc_time.tm_sec); - - if (ret < 6) { - fprintf(stderr, "\nPlease check your input\n"); - return; - } - - /* months should be in the range 0 to 11 */ - rtc_time.tm_mon -= 1; - /* years should be number of years since 1900 */ - rtc_time.tm_year -= 1900; - ret = ioctl(rtc_fd, RTC_SET_TIME, &rtc_time); - if (ret == -1) - perror("RTC_SET_TIME ioctl"); - } else if (strncmp(cmdline, "getwakealarm", 12) == 0) { - ret = ioctl(rtc_fd, RTC_WKALM_RD, &rtc_wakealarm); - if (ret == -1) - perror("RTC_WKALM_RD ioctl"); - else { - fprintf(stderr, "\nRTC alarm is %s and %s\n", - rtc_wakealarm.enabled ? "enabled" : "disabled", - rtc_wakealarm.pending ? "pending": "not pending"); - fprintf(stderr, "\nCurrent alarm date and time is %02d/%02d/%04d, %02d:%02d:%02d\n", - rtc_wakealarm.time.tm_mon + 1, rtc_wakealarm.time.tm_mday, - rtc_wakealarm.time.tm_year + 1900, rtc_wakealarm.time.tm_hour, - rtc_wakealarm.time.tm_min, rtc_wakealarm.time.tm_sec); - } - } else if (strncmp(cmdline, "setwakealarm", 12) == 0) { - fprintf(stderr, "\nSetting alarm interrupt...Press Ctrl+C to abort\n\n"); - fflush(stderr); - - /* Point past the string and one whitespace */ - cmdline += 13; - ret = sscanf(cmdline, "%02d/%02d/%04d, %02d:%02d:%02d", - &rtc_wakealarm.time.tm_mon, &rtc_wakealarm.time.tm_mday, - &rtc_wakealarm.time.tm_year, &rtc_wakealarm.time.tm_hour, - &rtc_wakealarm.time.tm_min, &rtc_wakealarm.time.tm_sec); - - if (ret < 6) { - fprintf(stderr, "\nPlease check your input\n"); - return; - } - - /* months should be in the range 0 to 11 */ - rtc_wakealarm.time.tm_mon -= 1; - /* years should be number of years since 1900 */ - rtc_wakealarm.time.tm_year -= 1900; - - /* Enable wake alarm interrupt */ - rtc_wakealarm.enabled = 1; - - /* Set pending to 0 */ - rtc_wakealarm.pending = 1; - - /* Set handler for SIGINT */ - signal(SIGINT, alarminthandler); - - ret = ioctl(rtc_fd, RTC_WKALM_SET, &rtc_wakealarm); - if (ret == -1) { - perror("RTC_WKALM_SET ioctl"); - return; - } - - while (1) { - ret = ioctl(rtc_fd, RTC_WKALM_RD, &rtc_wakealarm); - if (ret == -1) { - perror("RTC_WKALM_RD ioctl"); - return; - } - - if (!rtc_wakealarm.enabled) { - /* We could be here either because we received the alarm - * interrupt, or the SIGINT handler was executed. To - * differentiate between the two cases, we use the flag. - */ - if (!signal_recvd) - fprintf(stderr, "\nReceived alarm interrupt\n"); - else - fprintf(stderr, "\nAborting...\n"); - - fflush(stderr); - break; - } - } - - /* In case we did not receive a signal, and we fall through */ - alarminthandler(SIGINT); - signal_recvd = 0; - } else if (strncmp(cmdline, "wakealarmoff", 12) == 0) { - fprintf(stderr, "Turning wake alarm interrupt off\n"); - fflush(stderr); - - ret = ioctl(rtc_fd, RTC_WKALM_RD, &rtc_wakealarm); - if (ret == -1) { - perror("RTC_WKALM_RD ioctl"); - return; - } - - /* Disable wake alarm */ - rtc_wakealarm.enabled = 0; - rtc_wakealarm.pending = 0; - ret = ioctl(rtc_fd, RTC_WKALM_SET, &rtc_wakealarm); - - if (ret == -1) - perror("RTC_WKALM_SET ioctl"); - } else if (strncmp(cmdline, "getperiodicrate", 15) == 0) { - unsigned long rate; - - ret = ioctl(rtc_fd, RTC_IRQP_READ, &rate); - if (ret == -1) { - if (errno == ENOTTY) - fprintf(stderr, "\nNo periodic interrupt support\n"); - else - perror("RTC_IRQP_READ ioctl"); - - return; - } - - fprintf(stderr, "\nPeriodic interrupt rate is %luHz\n", rate); - } else if (strncmp(cmdline, "setperiodicrate", 15) == 0) { - unsigned long rate; - - cmdline += 16; - - sscanf(cmdline, "%lu", &rate); - /* bounds check */ - if (rate < 2 || rate > 8192) { - fprintf(stderr, "\nInvalid rate specified\n"); - return; - } - - /* the rate should be a power of 2 */ - if (rate & (rate - 1)) { - fprintf(stderr, "\nInvalid rate. Only power of 2 allowed\n"); - return; - } - - ret = ioctl(rtc_fd, RTC_IRQP_SET, rate); - if (ret == -1) { - if (errno == ENOTTY) - fprintf(stderr, "\nCannot change periodic interrupt rate\n"); - else - perror("RTC_IRQP_SET ioctl"); - - return; - } - } else if (strncmp(cmdline, "periodicinton", 13) == 0) { - /* Set default handler for SIGINT */ - signal(SIGINT, periodicinthandler); - - ret = ioctl(rtc_fd, RTC_PIE_ON, 0); - if (ret == -1) { - perror("RTC_PIE_ON ioctl"); - return; - } - - fprintf(stderr, "\nChecking periodic interrupt rate...Press Ctrl+C to abort\n\n"); - fflush(stderr); - - loop = 1; - while (loop) { - struct timeval tv = {5, 0}; - fd_set readfds; - - FD_ZERO(&readfds); - FD_SET(rtc_fd, &readfds); - - ret = select(rtc_fd + 1, &readfds, NULL, NULL, &tv); - if (ret == -1) { - if (errno != EINTR) - perror("select"); - - /* Break the loop */ - loop = 0; - } else { - /* Non blocking read */ - ret = read(rtc_fd, &data, sizeof(unsigned long)); - if (ret == -1) { - perror("read"); - loop = 0; - } else { - fprintf(stderr, "."); - irqcount++; - } - } - } - - /* Turn off periodic interrupts */ - ret = ioctl(rtc_fd, RTC_PIE_OFF, 0); - if (ret == -1) - perror("RTC_PIE_OFF ioctl"); - } else if (strncmp(cmdline, "periodicintoff", 14) == 0) { - fprintf(stderr, "Turning periodic interrupt off\n"); - fflush(stderr); - - ret = ioctl(rtc_fd, RTC_PIE_OFF, 0); - if (ret == -1) - perror("RTC_PIE_OFF ioctl"); - } else if (strncmp(cmdline, "license", 7) == 0) { - show_license(); - } else if (strncmp(cmdline, "exit", 4) == 0) { - close(rtc_fd); - printf("\nExiting...\n"); - exit(EXIT_SUCCESS); - } else { - printf("\nUnknown command\n"); - print_usage(); - } -} - -int main(int argc, char *argv[]) -{ - char *cmdline= NULL; - - printf("RTC sample application version: %s\n", RTC_APP_VERSION); - printf("Copyright (c) 2014, Advanced Micro Devices, Inc.\n" - "This sample application comes with ABSOLUTELY NO WARRANTY;\n" - "This is free software, and you are welcome to redistribute it\n" - "under certain conditions; type `license' for details.\n\n"); - - /* Handler for Ctrl+C */ - signal(SIGINT, sighandler); - - switch(argc) { - case 2: - rtc = argv[1]; - /* FALL THROUGH */ - case 1: - break; - default: - fprintf(stderr, "usage: rtc_test [rtcdev]\n"); - return 1; - } - - rtc_fd = open(rtc, O_RDONLY); - if (rtc_fd == -1) { - perror(rtc); - exit(errno); - } - - while (1) { - cmdline = readline(show_prompt()); - parse_cmd(cmdline); - /* Free the memory malloc'ed by readline */ - free(cmdline); - } - - /* Should never reach here */ - return 0; -} diff --git a/meta-steppeeagle/recipes-applications/rtc-test/rtc-test_1.0.bb b/meta-steppeeagle/recipes-applications/rtc-test/rtc-test_1.0.bb deleted file mode 100644 index 868c63c9..00000000 --- a/meta-steppeeagle/recipes-applications/rtc-test/rtc-test_1.0.bb +++ /dev/null @@ -1,23 +0,0 @@ -DESCRIPTION = "Sample application for AMD RTC driver" -SECTION = "applications" -LICENSE = "BSD" -DEPENDS = "readline" -LIC_FILES_CHKSUM = "file://rtc-test.c;md5=cdf9bfd59714d20025056dbfaaf31134" - -PR = "r1" -PV = "1.0" - -SRC_URI = "file://rtc-test.c" - -S = "${WORKDIR}" - -TARGET_CC_ARCH += "${LDFLAGS}" - -do_compile() { - ${CC} rtc-test.c -o rtc-test -lreadline -} - -do_install() { - install -d ${D}${bindir} - install -m 0755 rtc-test ${D}${bindir} -} diff --git a/meta-steppeeagle/recipes-applications/smbus-test/files/LICENSE b/meta-steppeeagle/recipes-applications/smbus-test/files/LICENSE deleted file mode 100644 index d159169d..00000000 --- a/meta-steppeeagle/recipes-applications/smbus-test/files/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - 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. - - 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., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/meta-steppeeagle/recipes-applications/smbus-test/files/i2c-dev.h b/meta-steppeeagle/recipes-applications/smbus-test/files/i2c-dev.h deleted file mode 100644 index b9358174..00000000 --- a/meta-steppeeagle/recipes-applications/smbus-test/files/i2c-dev.h +++ /dev/null @@ -1,335 +0,0 @@ -/* - i2c-dev.h - i2c-bus driver, char device interface - - Copyright (C) 1995-97 Simon G. Vogl - Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl> - - 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. - - 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., 51 Franklin Street, Fifth Floor, Boston, - MA 02110-1301 USA. -*/ - -/* $Id: i2c-dev.h 5894 2010-12-12 13:22:29Z khali $ */ - -#ifndef LIB_I2CDEV_H -#define LIB_I2CDEV_H - -#include <linux/types.h> -#include <sys/ioctl.h> - - -/* -- i2c.h -- */ - - -/* - * I2C Message - used for pure i2c transaction, also from /dev interface - */ -struct i2c_msg { - __u16 addr; /* slave address */ - unsigned short flags; -#define I2C_M_TEN 0x10 /* we have a ten bit chip address */ -#define I2C_M_RD 0x01 -#define I2C_M_NOSTART 0x4000 -#define I2C_M_REV_DIR_ADDR 0x2000 -#define I2C_M_IGNORE_NAK 0x1000 -#define I2C_M_NO_RD_ACK 0x0800 - short len; /* msg length */ - char *buf; /* pointer to msg data */ -}; - -/* To determine what functionality is present */ - -#define I2C_FUNC_I2C 0x00000001 -#define I2C_FUNC_10BIT_ADDR 0x00000002 -#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */ -#define I2C_FUNC_SMBUS_PEC 0x00000008 -#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */ -#define I2C_FUNC_SMBUS_QUICK 0x00010000 -#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000 -#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000 -#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000 -#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000 -#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000 -#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000 -#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000 -#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000 -#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000 -#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */ -#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */ - -#define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \ - I2C_FUNC_SMBUS_WRITE_BYTE) -#define I2C_FUNC_SMBUS_BYTE_DATA (I2C_FUNC_SMBUS_READ_BYTE_DATA | \ - I2C_FUNC_SMBUS_WRITE_BYTE_DATA) -#define I2C_FUNC_SMBUS_WORD_DATA (I2C_FUNC_SMBUS_READ_WORD_DATA | \ - I2C_FUNC_SMBUS_WRITE_WORD_DATA) -#define I2C_FUNC_SMBUS_BLOCK_DATA (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \ - I2C_FUNC_SMBUS_WRITE_BLOCK_DATA) -#define I2C_FUNC_SMBUS_I2C_BLOCK (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \ - I2C_FUNC_SMBUS_WRITE_I2C_BLOCK) - -/* Old name, for compatibility */ -#define I2C_FUNC_SMBUS_HWPEC_CALC I2C_FUNC_SMBUS_PEC - -/* - * Data for SMBus Messages - */ -#define I2C_SMBUS_BLOCK_MAX 32 /* As specified in SMBus standard */ -#define I2C_SMBUS_I2C_BLOCK_MAX 32 /* Not specified but we use same structure */ -union i2c_smbus_data { - __u8 byte; - __u16 word; - __u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */ - /* and one more for PEC */ -}; - -/* smbus_access read or write markers */ -#define I2C_SMBUS_READ 1 -#define I2C_SMBUS_WRITE 0 - -/* SMBus transaction types (size parameter in the above functions) - Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */ -#define I2C_SMBUS_QUICK 0 -#define I2C_SMBUS_BYTE 1 -#define I2C_SMBUS_BYTE_DATA 2 -#define I2C_SMBUS_WORD_DATA 3 -#define I2C_SMBUS_PROC_CALL 4 -#define I2C_SMBUS_BLOCK_DATA 5 -#define I2C_SMBUS_I2C_BLOCK_BROKEN 6 -#define I2C_SMBUS_BLOCK_PROC_CALL 7 /* SMBus 2.0 */ -#define I2C_SMBUS_I2C_BLOCK_DATA 8 - - -/* ----- commands for the ioctl like i2c_command call: - * note that additional calls are defined in the algorithm and hw - * dependent layers - these can be listed here, or see the - * corresponding header files. - */ - /* -> bit-adapter specific ioctls */ -#define I2C_RETRIES 0x0701 /* number of times a device address */ - /* should be polled when not */ - /* acknowledging */ -#define I2C_TIMEOUT 0x0702 /* set timeout - call with int */ - - -/* this is for i2c-dev.c */ -#define I2C_SLAVE 0x0703 /* Change slave address */ - /* Attn.: Slave address is 7 or 10 bits */ -#define I2C_SLAVE_FORCE 0x0706 /* Change slave address */ - /* Attn.: Slave address is 7 or 10 bits */ - /* This changes the address, even if it */ - /* is already taken! */ -#define I2C_TENBIT 0x0704 /* 0 for 7 bit addrs, != 0 for 10 bit */ - -#define I2C_FUNCS 0x0705 /* Get the adapter functionality */ -#define I2C_RDWR 0x0707 /* Combined R/W transfer (one stop only)*/ -#define I2C_PEC 0x0708 /* != 0 for SMBus PEC */ - -#define I2C_SMBUS 0x0720 /* SMBus-level access */ - -/* -- i2c.h -- */ - - -/* Note: 10-bit addresses are NOT supported! */ - -/* This is the structure as used in the I2C_SMBUS ioctl call */ -struct i2c_smbus_ioctl_data { - char read_write; - __u8 command; - int size; - union i2c_smbus_data *data; -}; - -/* This is the structure as used in the I2C_RDWR ioctl call */ -struct i2c_rdwr_ioctl_data { - struct i2c_msg *msgs; /* pointers to i2c_msgs */ - int nmsgs; /* number of i2c_msgs */ -}; - - -static inline __s32 i2c_smbus_access(int file, char read_write, __u8 command, - int size, union i2c_smbus_data *data) -{ - struct i2c_smbus_ioctl_data args; - - args.read_write = read_write; - args.command = command; - args.size = size; - args.data = data; - return ioctl(file,I2C_SMBUS,&args); -} - - -static inline __s32 i2c_smbus_write_quick(int file, __u8 value) -{ - return i2c_smbus_access(file,value,0,I2C_SMBUS_QUICK,NULL); -} - -static inline __s32 i2c_smbus_read_byte(int file) -{ - union i2c_smbus_data data; - if (i2c_smbus_access(file,I2C_SMBUS_READ,0,I2C_SMBUS_BYTE,&data)) - return -1; - else - return 0x0FF & data.byte; -} - -static inline __s32 i2c_smbus_write_byte(int file, __u8 value) -{ - return i2c_smbus_access(file,I2C_SMBUS_WRITE,value, - I2C_SMBUS_BYTE,NULL); -} - -static inline __s32 i2c_smbus_read_byte_data(int file, __u8 command) -{ - union i2c_smbus_data data; - if (i2c_smbus_access(file,I2C_SMBUS_READ,command, - I2C_SMBUS_BYTE_DATA,&data)) - return -1; - else - return 0x0FF & data.byte; -} - -static inline __s32 i2c_smbus_write_byte_data(int file, __u8 command, - __u8 value) -{ - union i2c_smbus_data data; - data.byte = value; - return i2c_smbus_access(file,I2C_SMBUS_WRITE,command, - I2C_SMBUS_BYTE_DATA, &data); -} - -static inline __s32 i2c_smbus_read_word_data(int file, __u8 command) -{ - union i2c_smbus_data data; - if (i2c_smbus_access(file,I2C_SMBUS_READ,command, - I2C_SMBUS_WORD_DATA,&data)) - return -1; - else - return 0x0FFFF & data.word; -} - -static inline __s32 i2c_smbus_write_word_data(int file, __u8 command, - __u16 value) -{ - union i2c_smbus_data data; - data.word = value; - return i2c_smbus_access(file,I2C_SMBUS_WRITE,command, - I2C_SMBUS_WORD_DATA, &data); -} - -static inline __s32 i2c_smbus_process_call(int file, __u8 command, __u16 value) -{ - union i2c_smbus_data data; - data.word = value; - if (i2c_smbus_access(file,I2C_SMBUS_WRITE,command, - I2C_SMBUS_PROC_CALL,&data)) - return -1; - else - return 0x0FFFF & data.word; -} - - -/* Returns the number of read bytes */ -static inline __s32 i2c_smbus_read_block_data(int file, __u8 command, - __u8 *values) -{ - union i2c_smbus_data data; - int i; - if (i2c_smbus_access(file,I2C_SMBUS_READ,command, - I2C_SMBUS_BLOCK_DATA,&data)) - return -1; - else { - for (i = 1; i <= data.block[0]; i++) - values[i-1] = data.block[i]; - return data.block[0]; - } -} - -static inline __s32 i2c_smbus_write_block_data(int file, __u8 command, - __u8 length, const __u8 *values) -{ - union i2c_smbus_data data; - int i; - if (length > 32) - length = 32; - for (i = 1; i <= length; i++) - data.block[i] = values[i-1]; - data.block[0] = length; - return i2c_smbus_access(file,I2C_SMBUS_WRITE,command, - I2C_SMBUS_BLOCK_DATA, &data); -} - -/* Returns the number of read bytes */ -/* Until kernel 2.6.22, the length is hardcoded to 32 bytes. If you - ask for less than 32 bytes, your code will only work with kernels - 2.6.23 and later. */ -static inline __s32 i2c_smbus_read_i2c_block_data(int file, __u8 command, - __u8 length, __u8 *values) -{ - union i2c_smbus_data data; - int i; - - if (length > 32) - length = 32; - data.block[0] = length; - if (i2c_smbus_access(file,I2C_SMBUS_READ,command, - length == 32 ? I2C_SMBUS_I2C_BLOCK_BROKEN : - I2C_SMBUS_I2C_BLOCK_DATA,&data)) - return -1; - else { - for (i = 1; i <= data.block[0]; i++) - values[i-1] = data.block[i]; - return data.block[0]; - } -} - -static inline __s32 i2c_smbus_write_i2c_block_data(int file, __u8 command, - __u8 length, - const __u8 *values) -{ - union i2c_smbus_data data; - int i; - if (length > 32) - length = 32; - for (i = 1; i <= length; i++) - data.block[i] = values[i-1]; - data.block[0] = length; - return i2c_smbus_access(file,I2C_SMBUS_WRITE,command, - I2C_SMBUS_I2C_BLOCK_BROKEN, &data); -} - -/* Returns the number of read bytes */ -static inline __s32 i2c_smbus_block_process_call(int file, __u8 command, - __u8 length, __u8 *values) -{ - union i2c_smbus_data data; - int i; - if (length > 32) - length = 32; - for (i = 1; i <= length; i++) - data.block[i] = values[i-1]; - data.block[0] = length; - if (i2c_smbus_access(file,I2C_SMBUS_WRITE,command, - I2C_SMBUS_BLOCK_PROC_CALL,&data)) - return -1; - else { - for (i = 1; i <= data.block[0]; i++) - values[i-1] = data.block[i]; - return data.block[0]; - } -} - - -#endif /* LIB_I2CDEV_H */ diff --git a/meta-steppeeagle/recipes-applications/smbus-test/files/smbus-test.c b/meta-steppeeagle/recipes-applications/smbus-test/files/smbus-test.c deleted file mode 100644 index 128c5391..00000000 --- a/meta-steppeeagle/recipes-applications/smbus-test/files/smbus-test.c +++ /dev/null @@ -1,632 +0,0 @@ -/***************************************************************************** -* -* Copyright (c) 2014, Advanced Micro Devices, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of Advanced Micro Devices, Inc. nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -***************************************************************************/ -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <fcntl.h> -#include <signal.h> -#include <dirent.h> - -#include <sys/types.h> -#include <sys/ioctl.h> -#include <sys/stat.h> - -#include <readline/readline.h> - -#include "i2c-dev.h" - -#define SMBUS_APP_VERSION "0.1" - -static int adapter_nr = -1; -static int slave_addr = 0xFF; -static char filename[20]; -static int fd = -1; - -char *show_prompt(void) -{ - return "$ "; -} - -void sighandler(int sig) -{ - printf("\n%s", show_prompt()); -} - -void show_license(void) -{ - printf("/*****************************************************************************\n" - "*\n" - "* Copyright (c) 2014, Advanced Micro Devices, Inc.\n" - "* All rights reserved.\n" - "*\n" - "* Redistribution and use in source and binary forms, with or without\n" - "* modification, are permitted provided that the following conditions are met:\n" - "* * Redistributions of source code must retain the above copyright\n" - "* notice, this list of conditions and the following disclaimer.\n" - "* * Redistributions in binary form must reproduce the above copyright\n" - "* notice, this list of conditions and the following disclaimer in the\n" - "* documentation and/or other materials provided with the distribution.\n" - "* * Neither the name of Advanced Micro Devices, Inc. nor the names of\n" - "* its contributors may be used to endorse or promote products derived\n" - "* from this software without specific prior written permission.\n" - "*\n" - "* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n" - "* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n" - "* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" - "* DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY\n" - "* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n" - "* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n" - "* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n" - "* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" - "* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n" - "* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" - "*\n" - "*\n" - "***************************************************************************/\n"); -} - -void print_usage(void) -{ - printf("\nCommands Supported ->\n"); - printf(" enumerate : List all adapters available\n"); - printf(" setadapternum <num> : Set the adapter number\n"); - printf(" getadapternum : Get the current adapter number\n"); - printf(" setslaveaddr <addr> : Set the slave device address\n"); - printf(" getslaveaddr : Get the current slave device address\n"); - printf(" getadapterfunc : Displays the functionalities supported by the adapter\n"); - printf(" quicksend <bit> : Sends a single bit (0 or 1) to the device\n"); - printf(" receivebyte : Receive a single byte from the slave device\n"); - printf(" sendbyte <byte> : Sends a single byte to the slave device\n"); - printf(" readbyte <register> : Reads a byte at register of the slave device\n"); - printf(" writebyte <register> <byte> : Writes a byte at register of the slave device\n"); - printf(" readword <register> : Reads a word at register of the slave device\n"); - printf(" writeword <register> <word> : Writes a word at register of the slave device\n"); - printf(" readblock <register> : Reads a block of data from register of the slave device\n"); - printf(" writeblock <register> <filename> : Writes a block of data read from filename to register\n" - " of the slave device\n"); - printf(" license : Displays the terms of LICENSE for this application\n"); - printf(" help : Displays help text\n"); - printf(" exit : Exits the application\n\n"); -} - -void parse_cmd(const char *cmdline) -{ - struct i2c_smbus_ioctl_data param; - union i2c_smbus_data smbus_data; - unsigned long funcs; - - if (strncmp(cmdline, "enumerate", 9) == 0) { - DIR *dir; - struct dirent *dir_entry; - int adapter_found = 0; - - /* Get the directory handle */ - if ((dir = opendir("/dev")) == NULL) { - printf("Failed to open directory /dev. Probably you " - "do not have right privilege!\n\n"); - exit(EXIT_FAILURE); - } - - /* Iterate over all the directory entries */ - while ((dir_entry = readdir(dir)) != NULL) { - /* - * If the file is a character device, and its signature - * matches i2c-x, then we print the corresponding file. - */ - if ((dir_entry->d_type == DT_CHR) && - (strncmp(dir_entry->d_name, "i2c-", 4) == 0)) { - printf("%s\n", dir_entry->d_name); - adapter_found = 1; - } - } - - printf("\n"); - - /* - * In case we did not find even a single adapter, we print a - * message and exit. - */ - if (!adapter_found) { - printf("No adapters found, load i2c-dev kernel module and try again\n\n"); - exit(EXIT_FAILURE); - } - } else if (strncmp(cmdline, "setadapternum", 13) == 0) { - int input; - int file_desc; - - cmdline += 14; - if (sscanf(cmdline, "%d", &input) < 1) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - snprintf(filename, 19, "/dev/i2c-%d", input); - file_desc = open(filename, O_RDWR); - if (file_desc < 0) { - printf("Error opening file %s\n\n", filename); - return; - } - - /* Once we have validated inputs, we store them into the global - * variables used at other places in the program. - */ - fd = file_desc; - adapter_nr = input; - printf("Adapter Number set to %d\n\n", adapter_nr); - } else if (strncmp(cmdline, "getadapternum", 13) == 0) { - if (adapter_nr == -1) - printf("Adapter Number not set\n\n"); - else - printf("Adapter Number set to %d\n\n", adapter_nr); - } else if (strncmp(cmdline, "setslaveaddr", 12) == 0) { - int addr; - - cmdline += 13; - if (sscanf(cmdline, "0x%x", &addr) < 1) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - /* Set the slave address */ - if (ioctl(fd, I2C_SLAVE, addr) < 0) { - printf("Error setting slave address. Please make sure " - "to provide 7-bit slave address\n\n"); - return; - } - - slave_addr = addr; - printf("Slave Address set to 0x%x\n\n", slave_addr); - } else if (strncmp(cmdline, "getslaveaddr", 12) == 0) { - if (slave_addr == 0xFF) - printf("Slave Address not set\n\n"); - else - printf("Slave Address set to 0x%x\n\n", slave_addr); - } else if (strncmp(cmdline, "getadapterfunc", 14) == 0) { - if (adapter_nr == -1) { - printf("Please set adapter first\n\n"); - return; - } - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (funcs & I2C_FUNC_I2C) - printf("I2C_FUNC_I2C\n"); - if (funcs & I2C_FUNC_10BIT_ADDR) - printf("I2C_FUNC_10BIT_ADDR\n"); - if (funcs & I2C_FUNC_PROTOCOL_MANGLING) - printf("I2C_FUNC_PROTOCOL_MANGLING\n"); - if (funcs & I2C_FUNC_SMBUS_PEC) - printf("I2C_FUNC_SMBUS_PEC\n"); - if (funcs & I2C_FUNC_SMBUS_BLOCK_PROC_CALL) - printf("I2C_FUNC_SMBUS_BLOCK_PROC_CALL\n"); - if (funcs & I2C_FUNC_SMBUS_QUICK) - printf("I2C_FUNC_SMBUS_QUICK\n"); - if (funcs & I2C_FUNC_SMBUS_READ_BYTE) - printf("I2C_FUNC_SMBUS_READ_BYTE\n"); - if (funcs & I2C_FUNC_SMBUS_WRITE_BYTE) - printf("I2C_FUNC_SMBUS_WRITE_BYTE\n"); - if (funcs & I2C_FUNC_SMBUS_READ_BYTE_DATA) - printf("I2C_FUNC_SMBUS_READ_BYTE_DATA\n"); - if (funcs & I2C_FUNC_SMBUS_WRITE_BYTE_DATA) - printf("I2C_FUNC_SMBUS_WRITE_BYTE_DATA\n"); - if (funcs & I2C_FUNC_SMBUS_READ_WORD_DATA) - printf("I2C_FUNC_SMBUS_READ_WORD_DATA\n"); - if (funcs & I2C_FUNC_SMBUS_WRITE_WORD_DATA) - printf("I2C_FUNC_SMBUS_WRITE_WORD_DATA\n"); - if (funcs & I2C_FUNC_SMBUS_PROC_CALL) - printf("I2C_FUNC_SMBUS_PROC_CALL\n"); - if (funcs & I2C_FUNC_SMBUS_READ_BLOCK_DATA) - printf("I2C_FUNC_SMBUS_READ_BLOCK_DATA\n"); - if (funcs & I2C_FUNC_SMBUS_WRITE_BLOCK_DATA) - printf("I2C_FUNC_SMBUS_WRITE_BLOCK_DATA\n"); - if (funcs & I2C_FUNC_SMBUS_READ_I2C_BLOCK) - printf("I2C_FUNC_SMBUS_READ_I2C_BLOCK\n"); - if (funcs & I2C_FUNC_SMBUS_WRITE_I2C_BLOCK) - printf("I2C_FUNC_SMBUS_WRITE_I2C_BLOCK\n"); - - printf("\n"); - } else if (strncmp(cmdline, "quicksend", 9) == 0) { - int bit; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_QUICK)) { - printf("SMBus Quick command not supported by the adapter\n\n"); - return; - } - - cmdline += 10; - if (sscanf(cmdline, "%d", &bit) < 1) { - printf("Invalid input, please try again\n\n"); - return; - } - - /* Sanity check */ - if ((bit != 0) && (bit != 1)) { - printf("Only 0 or 1 is allowed\n\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - param.data = NULL; - - if (bit) - param.read_write = I2C_SMBUS_READ; - else - param.read_write = I2C_SMBUS_WRITE; - - param.size = I2C_SMBUS_QUICK; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Quick command failed\n\n"); - return; - } - - printf("Quick Send %d successfull\n\n", bit); - } else if (strncmp(cmdline, "receivebyte", 11) == 0) { - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_BYTE)) { - printf("SMBus receivebyte command not supported by adapter\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - memset(&smbus_data, 0, sizeof(union i2c_smbus_data)); - param.data = &smbus_data; - - param.read_write = I2C_SMBUS_READ; - param.size = I2C_SMBUS_BYTE; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Receive Byte command failed\n\n"); - return; - } - - printf("Byte Received 0x%x\n\n", param.data->byte); - } else if (strncmp(cmdline, "sendbyte", 8) == 0) { - int byte; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_BYTE)) { - printf("SMBus sendbyte command not supported by adapter\n"); - return; - } - - cmdline += 9; - if (sscanf(cmdline, "0x%x", &byte) < 1) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - param.data = NULL; - - param.read_write = I2C_SMBUS_WRITE; - param.command = byte; - param.size = I2C_SMBUS_BYTE; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Send Byte command failed\n\n"); - return; - } - - printf("Sent 0x%x to slave\n\n", byte); - } else if (strncmp(cmdline, "readbyte", 8) == 0) { - int reg; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_BYTE_DATA)) { - printf("SMBus readbyte command not supported by adapter\n"); - return; - } - - cmdline += 9; - if (sscanf(cmdline, "0x%x", ®) < 1) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - memset(&smbus_data, 0, sizeof(union i2c_smbus_data)); - param.data = &smbus_data; - - param.command = reg; - param.read_write = I2C_SMBUS_READ; - param.size = I2C_SMBUS_BYTE_DATA; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Read Byte Data command failed\n\n"); - return; - } - - printf("Read 0x%x at register 0x%x of the slave\n\n", param.data->byte, reg); - } else if (strncmp(cmdline, "writebyte", 9) == 0) { - int reg, byte; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_BYTE_DATA)) { - printf("SMBus writebyte command not supported by adapter\n"); - return; - } - - cmdline += 10; - if (sscanf(cmdline, "0x%x 0x%x", ®, &byte) < 2) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - memset(&smbus_data, 0, sizeof(union i2c_smbus_data)); - param.data = &smbus_data; - - param.command = reg; - param.read_write = I2C_SMBUS_WRITE; - param.size = I2C_SMBUS_BYTE_DATA; - param.data->byte = byte; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Write Byte Data command failed\n\n"); - return; - } - - printf("Written 0x%x to register 0x%x of the slave\n\n", byte, reg); - } else if (strncmp(cmdline, "readword", 8) == 0) { - int reg; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_WORD_DATA)) { - printf("SMBus readword command not supported by adapter\n"); - return; - } - - cmdline += 9; - if (sscanf(cmdline, "0x%x", ®) < 1) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - memset(&smbus_data, 0, sizeof(union i2c_smbus_data)); - param.data = &smbus_data; - - param.command = reg; - param.read_write = I2C_SMBUS_READ; - param.size = I2C_SMBUS_WORD_DATA; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Read Word Data command failed\n\n"); - return; - } - - printf("Read 0x%.4x at register 0x%x of the slave\n\n", param.data->word, reg); - } else if (strncmp(cmdline, "writeword", 9) == 0) { - int reg, word; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_WORD_DATA)) { - printf("SMBus writeword command not supported by adapter\n"); - return; - } - - cmdline += 10; - if (sscanf(cmdline, "0x%x 0x%x", ®, &word) < 2) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - memset(&smbus_data, 0, sizeof(union i2c_smbus_data)); - param.data = &smbus_data; - - param.command = reg; - param.read_write = I2C_SMBUS_WRITE; - param.size = I2C_SMBUS_WORD_DATA; - param.data->word = word; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Write Word Data command failed\n\n"); - return; - } - - printf("Written 0x%x to register 0x%x of the slave\n\n", word, reg); - } else if (strncmp(cmdline, "readblock", 9) == 0) { - int reg; - int i; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_BLOCK_DATA)) { - printf("SMBus readblock command not supported by adapter\n"); - return; - } - - cmdline += 10; - if (sscanf(cmdline, "0x%x", ®) < 1) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - memset(&smbus_data, 0, sizeof(union i2c_smbus_data)); - param.data = &smbus_data; - - param.command = reg; - param.read_write = I2C_SMBUS_READ; - param.size = I2C_SMBUS_BLOCK_DATA; - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Read Block Data command failed\n\n"); - return; - } - - printf("Reading %d bytes from register 0x%x:\n", param.data->block[0], reg); - for (i = 1; i <= param.data->block[0]; i++) - printf("0x%.2x ", param.data->block[i]); - printf("\n\n"); - } else if (strncmp(cmdline, "writeblock", 10) == 0) { - int reg; - char infile[256]; - FILE *file; - int data; - int num_bytes = 0; - int i; - - /* Get the adapter functionality */ - if (ioctl(fd, I2C_FUNCS, &funcs) < 0) { - printf("Error getting adapter functionalities\n\n"); - return; - } - - if (!(funcs & I2C_FUNC_SMBUS_BLOCK_DATA)) { - printf("SMBus writeblock command not supported by adapter\n"); - return; - } - - cmdline += 11; - if (sscanf(cmdline, "0x%x %s", ®, infile) < 2) { - printf("Invalid inputs, please try again\n\n"); - return; - } - - /* open infile for reading */ - if ((file = fopen(infile, "r")) == NULL) { - printf("Failed to open file %s\n\n", infile); - return; - } - - /* setup parameters to the IOCTL call */ - memset(¶m, 0, sizeof(struct i2c_smbus_ioctl_data)); - memset(&smbus_data, 0, sizeof(union i2c_smbus_data)); - param.data = &smbus_data; - - param.command = reg; - param.read_write = I2C_SMBUS_WRITE; - param.size = I2C_SMBUS_BLOCK_DATA; - - /* - * populate block data to be sent to the device. SMBus sets a - * limit of 32 bytes to be sent or received in a block. - */ - for (i = 1; i <= 32; i++) { - if (fscanf(file, "0x%x ", &data) == EOF) - break; - - param.data->block[i] = data; - num_bytes++; - } - - /* The very first block data should be the number of bytes - * in the block. - */ - param.data->block[0] = num_bytes; - - printf("Writing %d bytes to register 0x%.2x of device\n\n", - param.data->block[0], reg); - - /* Execute block write command */ - if (ioctl(fd, I2C_SMBUS, ¶m) == -1) { - printf("SMBus Write Block Data command failed\n\n"); - return; - } - - fclose(file); - } else if (strncmp(cmdline, "license", 7) == 0) { - show_license(); - } else if (strncmp(cmdline, "exit", 4) == 0) { - printf("\nExiting...\n"); - if((fd != -1) && (close(fd) < 0)) - printf("Error closing device\n\n"); - - exit(EXIT_SUCCESS); - } else if (strncmp(cmdline, "help", 4) == 0) { - print_usage(); - } else { - printf("\nUnknown command\n"); - print_usage(); - } -} - -int main(void) -{ - char *cmdline= NULL; - - printf("SMBus sample application version: %s\n", SMBUS_APP_VERSION); - printf("Copyright (c) 2014, Advanced Micro Devices, Inc.\n" - "This sample application comes with ABSOLUTELY NO WARRANTY;\n" - "This is free software, and you are welcome to redistribute it\n" - "under certain conditions; type `license` for details.\n\n"); - - /* Handler for Ctrl+C */ - signal(SIGINT, sighandler); - - while (1) { - cmdline = readline(show_prompt()); - parse_cmd(cmdline); - /* Free the memory malloc'ed by readline */ - free(cmdline); - } - - /* Should never reach here */ - return 0; -} diff --git a/meta-steppeeagle/recipes-applications/smbus-test/smbus-test_1.0.bb b/meta-steppeeagle/recipes-applications/smbus-test/smbus-test_1.0.bb deleted file mode 100644 index 2347b74d..00000000 --- a/meta-steppeeagle/recipes-applications/smbus-test/smbus-test_1.0.bb +++ /dev/null @@ -1,27 +0,0 @@ -DESCRIPTION = "Sample application for AMD SMBUS driver" -SECTION = "applications" -LICENSE = "BSD | GPLv2" -DEPENDS = "readline" -LIC_FILES_CHKSUM = "file://smbus-test.c;md5=51840771157718d4d562329e476d6917 \ - file://i2c-dev.h;md5=11afa8583cd78137a63feb1a8b24cc51 \ - " - -PR = "r1" -PV = "1.0" - -SRC_URI = "file://smbus-test.c \ - file://i2c-dev.h \ - " - -S = "${WORKDIR}" - -TARGET_CC_ARCH += "${LDFLAGS}" - -do_compile() { - ${CC} smbus-test.c -o smbus-test -lreadline -} - -do_install() { - install -d ${D}${bindir} - install -m 0755 smbus-test ${D}${bindir} -} diff --git a/meta-steppeeagle/recipes-applications/watchdog-test/files/watchdog-test.c b/meta-steppeeagle/recipes-applications/watchdog-test/files/watchdog-test.c deleted file mode 100644 index 77124784..00000000 --- a/meta-steppeeagle/recipes-applications/watchdog-test/files/watchdog-test.c +++ /dev/null @@ -1,288 +0,0 @@ -/***************************************************************************** -* -* Copyright (c) 2014, Advanced Micro Devices, Inc. -* All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of Advanced Micro Devices, Inc. nor the names of -* its contributors may be used to endorse or promote products derived -* from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -* -***************************************************************************/ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <fcntl.h> -#include <signal.h> -#include <readline/readline.h> -#include <linux/watchdog.h> - -#define WATCHDOG_APP_VERSION "0.1" - -int fd; /* /dev/watchdog file descriptor */ -volatile int ping; - -char *show_prompt(void) -{ - return "$ "; -} - -void sighandler(int sig) -{ - printf("\n%s", show_prompt()); -} - -void pinghandler(int sig) -{ - ping = 0; - printf("\n"); - /* Set the signal handler back to the original */ - signal(SIGINT, sighandler); -} - -void show_license(void) -{ - printf("/*****************************************************************************\n" - "*\n" - "* Copyright (c) 2014, Advanced Micro Devices, Inc.\n" - "* All rights reserved.\n" - "*\n" - "* Redistribution and use in source and binary forms, with or without\n" - "* modification, are permitted provided that the following conditions are met:\n" - "* * Redistributions of source code must retain the above copyright\n" - "* notice, this list of conditions and the following disclaimer.\n" - "* * Redistributions in binary form must reproduce the above copyright\n" - "* notice, this list of conditions and the following disclaimer in the\n" - "* documentation and/or other materials provided with the distribution.\n" - "* * Neither the name of Advanced Micro Devices, Inc. nor the names of\n" - "* its contributors may be used to endorse or promote products derived\n" - "* from this software without specific prior written permission.\n" - "*\n" - "* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n" - "* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n" - "* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n" - "* DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY\n" - "* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n" - "* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n" - "* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n" - "* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n" - "* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n" - "* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n" - "*\n" - "*\n" - "***************************************************************************/\n"); -} - -void print_usage() -{ - printf("\nCommands Supported ->\n"); - printf(" disablewatchdog : Disables the Watchdog Timer\n"); - printf(" enablewatchdog : Enables the Watchdog Timer\n"); - printf(" getfeatures : Shows the features supported by the Watchdog implementation\n"); - printf(" getstatus : Gives the current status of Watchdog Timer\n"); - printf(" getbootstatus : Displays the status of Watchdog Hardware after reboot or fresh boot\n"); - printf(" ping : Resets Watchdog Timer at regular intervals\n"); - printf(" gettimeout : Gives the value of Watchdog timeout (in frequency units)\n"); - printf(" gettimeleft : Gives the current value of Watchdog Timer (in frequency units)\n"); - printf(" sendmagicchar : Sends the magic character 'V' to the Watchdog device\n"); - printf(" settimeout <timeout> : Sets the new value for Watchdog timeout (in frequency units)\n"); - printf(" license : Displays the terms of LICENSE for this application\n"); - printf(" help : Displays help text\n"); - printf(" exit : Exits the application\n\n"); -} - -void parse_cmd(const char *cmdline) -{ - if (strncmp(cmdline, "help", 4) == 0) - print_usage(); - else if (strncmp(cmdline, "disablewatchdog", 7) == 0) { - int flags; - - printf("\nDisabling watchdog timer...\n"); - flags = WDIOS_DISABLECARD; - if (ioctl(fd, WDIOC_SETOPTIONS, &flags) < 0) - perror("Could not disable watchdog"); - } else if (strncmp(cmdline, "enablewatchdog", 6) == 0) { - int flags; - - printf("\nEnabling watchdog timer...\n"); - flags = WDIOS_ENABLECARD; - if (ioctl(fd, WDIOC_SETOPTIONS, &flags) < 0) - printf("Could not enable watchdog"); - } else if (strncmp(cmdline, "getfeatures", 10) == 0) { - struct watchdog_info info; - - if(ioctl(fd, WDIOC_GETSUPPORT, &info) < 0) - perror("Could not get watchdog features"); - - printf("\nIdentity:\t\t%s\n", info.identity); - printf("Firmware Version:\t%u\n", info.firmware_version); - printf("Options Set: \n" - "%s%s%s%s%s%s%s%s%s%s%s\n", - info.options & WDIOF_OVERHEAT ? "\t\t\tReset due to CPU overheat\n": "", - info.options & WDIOF_FANFAULT ? "\t\t\tFan failed\n": "", - info.options & WDIOF_EXTERN1 ? "\t\t\tExternal relay 1\n": "", - info.options & WDIOF_EXTERN2 ? "\t\t\tExternal relay 2\n": "", - info.options & WDIOF_POWERUNDER ? "\t\t\tPower bad/power fault\n": "", - info.options & WDIOF_CARDRESET ? "\t\t\tCard previously reset the CPU\n": "", - info.options & WDIOF_POWEROVER ? "\t\t\tPower over voltage\n": "", - info.options & WDIOF_SETTIMEOUT ? "\t\t\tSet timeout (in frequency units)\n": "", - info.options & WDIOF_MAGICCLOSE ? "\t\t\tSupports magic close character\n": "", - info.options & WDIOF_PRETIMEOUT ? "\t\t\tPretimeout (in frequency units)\n": "", - info.options & WDIOF_KEEPALIVEPING ? "\t\t\tKeep alive ping reply\n": ""); - } else if (strncmp(cmdline, "getstatus", 9) == 0) { - int status; - - printf("\n"); - if(ioctl(fd, WDIOC_GETSTATUS, &status) < 0) - perror("Could not get watchdog status"); - - if (status & (1 << 0)) - printf("\nWatchdog device is active\n"); - if (status & (1 << 1)) - printf("Watchdog device opened via /dev/watchdog\n"); - if (status & (1 << 2)) - printf("Received magic char\n"); - if (status & (1 << 3)) - printf("nowayout set\n"); - if (status & (1 << 4)) - printf("Watchdog device unregistered\n"); - } else if (strncmp(cmdline, "getbootstatus", 7) == 0) { - int bootstatus; - - if(ioctl(fd, WDIOC_GETBOOTSTATUS, &bootstatus) < 0) - perror("Could not get bootstatus"); - - printf("\nbootstatus: \n" - "%s%s%s%s%s%s%s%s%s%s%s\n", - bootstatus & WDIOF_OVERHEAT ? "\t\t\tReset due to CPU overheat\n": "", - bootstatus & WDIOF_FANFAULT ? "\t\t\tFan failed\n": "", - bootstatus & WDIOF_EXTERN1 ? "\t\t\tExternal relay 1\n": "", - bootstatus & WDIOF_EXTERN2 ? "\t\t\tExternal relay 2\n": "", - bootstatus & WDIOF_POWERUNDER ? "\t\t\tPower bad/power fault\n": "", - bootstatus & WDIOF_CARDRESET ? "\t\t\tCard previously reset the CPU\n": "", - bootstatus & WDIOF_POWEROVER ? "\t\t\tPower over voltage\n": "", - bootstatus & WDIOF_SETTIMEOUT ? "\t\t\tSet timeout (in frequency units)\n": "", - bootstatus & WDIOF_MAGICCLOSE ? "\t\t\tSupports magic close character\n": "", - bootstatus & WDIOF_PRETIMEOUT ? "\t\t\tPretimeout (in frequency units)\n": "", - bootstatus & WDIOF_KEEPALIVEPING ? "\t\t\tKeep alive ping reply\n": ""); - } else if (strncmp(cmdline, "ping", 4) == 0) { - int dummy; - - printf("\nContinuosly resetting Watchdog...press Ctrl+C to stop\n"); - printf("\nOnce you stop pinging, Watchog Timer will start counting down...\n"); - printf("...If the Watchdog Timer was enabled\n"); - - /* Lets set a different handler for Ctrl+C */ - signal(SIGINT, pinghandler); - - ping = 1; - while (ping) { - if(ioctl(fd, WDIOC_KEEPALIVE, &dummy) < 0) { - perror("Error sending ping"); - break; - } - sleep(1); - } - } else if (strncmp(cmdline, "gettimeout", 10) == 0) { - int timeout; - - if(ioctl(fd, WDIOC_GETTIMEOUT, &timeout) < 0) - perror("Error getting watchdog timeout"); - - printf("\nCurrent setting of timeout is %d frequency units\n", timeout); - } else if (strncmp(cmdline, "gettimeleft", 11) == 0) { - int timeleft; - - if(ioctl(fd, WDIOC_GETTIMELEFT, &timeleft) < 0) - perror("Error getting watchdog timeleft"); - - printf("\nTime left for system reboot/shutdown is %d frequency units\n", timeleft); - } else if (strncmp(cmdline, "sendmagicchar", 9) == 0) { - printf("\nSending magic character to Watchdog device...\n"); - printf("\nWatchdog Timer will be stopped once you exit the application\n"); - if(write(fd, "V", 1) < 0) - perror("Could not send magic character"); - } else if (strncmp(cmdline, "settimeout", 10) == 0) { - const char *charp = cmdline; - int timeout; - - /* Lets point to the end of first token */ - charp += strlen("settimeout"); - /* Skip blank characters */ - while (*charp == ' ' || *charp == '\t' || *charp == '\n') - charp++; - - /* Now we should be pointing to the first 'digit' character */ - timeout = atoi(charp); - - if(ioctl(fd, WDIOC_SETTIMEOUT, &timeout) < 0) { - perror("Could not set watchdog timeout"); - return; - } - - printf("\nSetting timeout to %d frequency units\n", timeout); - printf("Watchdog Timer will start counting down with the new timeout value\n"); - } else if (strncmp(cmdline, "license", 7) == 0) { - show_license(); - } else if (strncmp(cmdline, "exit", 4) == 0) { - printf("\nExiting...\n"); - printf("\nIf the Watchdog Timer was not disabled, and you did not send the magic character,\n" - "Watchdog Timer is still ticking, and your system will reboot soon\n"); - - if(close(fd) < 0) - perror("Error closing /dev/watchdog"); - exit(EXIT_SUCCESS); - } else { - printf("\nUnknown command\n"); - print_usage(); - } -} - -int main(void) -{ - char *cmdline= NULL; - - printf("Watchdog sample application version: %s\n", WATCHDOG_APP_VERSION); - printf("Copyright (c) 2014, Advanced Micro Devices, Inc.\n" - "This sample application comes with ABSOLUTELY NO WARRANTY;\n" - "This is free software, and you are welcome to redistribute it\n" - "under certain conditions; type `license' for details.\n\n"); - - - if ((fd = open("/dev/watchdog", O_WRONLY)) < 0) { - perror("Could not open /dev/watchdog"); - exit(1); - } - - /* Handler for Ctrl+C */ - signal(SIGINT, sighandler); - - while (1) { - cmdline = readline(show_prompt()); - parse_cmd(cmdline); - /* Free the memory malloc'ed by readline */ - free(cmdline); - } - - /* Should never reach here */ - return 0; -} diff --git a/meta-steppeeagle/recipes-applications/watchdog-test/watchdog-test_1.0.bb b/meta-steppeeagle/recipes-applications/watchdog-test/watchdog-test_1.0.bb deleted file mode 100644 index 43d511d0..00000000 --- a/meta-steppeeagle/recipes-applications/watchdog-test/watchdog-test_1.0.bb +++ /dev/null @@ -1,23 +0,0 @@ -DESCRIPTION = "Sample application for AMD Watchdog driver" -SECTION = "applications" -LICENSE = "BSD" -DEPENDS = "readline" -LIC_FILES_CHKSUM = "file://watchdog-test.c;md5=47ff70acbf47e0bf894330dee1143414" - -PR = "r1" -PV = "1.0" - -SRC_URI = "file://watchdog-test.c" - -S = "${WORKDIR}" - -TARGET_CC_ARCH += "${LDFLAGS}" - -do_compile() { - ${CC} watchdog-test.c -o watchdog-test -lreadline -} - -do_install() { - install -d ${D}${bindir} - install -m 0755 watchdog-test ${D}${bindir} -} |