【TINY4412】U-BOOT移植笔记:(11)LED驱动
宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64
目标板[底板]: Tiny4412SDK - 1506
目标板[核心板]: Tiny4412 - 1412
U-BOOT版本: 2017.03
交叉编译器: gcc-arm-none-eabi-5_4-2016q3
日期: 2017-05-21 11:34:46
作者: SY
LED驱动
git diff 6a94cf da4612
diff --git a/arch/arm/dts/exynos4412-tiny4412.dts b/arch/arm/dts/exynos4412-tiny4412.dts
index 342eb44..3b80246 100644
--- a/arch/arm/dts/exynos4412-tiny4412.dts
+++ b/arch/arm/dts/exynos4412-tiny4412.dts
@@ -52,6 +52,7 @@
status = "disabled";
};
+
sdhci@12510000 {
compatible = "samsung,exynos4412-sdhci";
status = "disabled";
@@ -74,6 +75,7 @@
status = "disabled";
};
+
dwmmc@12550000 {
compatible = "samsung,exynos4412-dw-mshc";
samsung,bus-width = <8>;
@@ -85,3 +87,4 @@
index = <4>;
};
};
+
diff --git a/auto_backup.sh b/auto_backup.sh
new file mode 100755
index 0000000..6a355d7
--- /dev/null
+++ b/auto_backup.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+echo "-----------------------------------------------------"
+echo "Auto Backup Config..."
+cp .config tiny4412_config
+
+echo "-----------------------------------------------------"
+echo "make..."
+make
+
+echo "-----------------------------------------------------"
+echo "Done..."
+
diff --git a/auto_run.sh b/auto_run.sh
deleted file mode 100755
index cc85e57..0000000
--- a/auto_run.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-echo "Clean Configuration File..."
-make distclean
-
-echo "Clean Obj..."
-make clean
-
-echo "Load Configuration File..."
-make tiny4412_defconfig
-
-echo "make..."
-make CROSS_COMPILE=arm-linux-
-
diff --git a/configs/tiny4412_defconfig b/configs/tiny4412_defconfig
index 0da8adf..4619461 100644
--- a/configs/tiny4412_defconfig
+++ b/configs/tiny4412_defconfig
@@ -8,7 +8,7 @@ CONFIG_SYS_CONSOLE_IS_IN_ENV=y
CONFIG_SYS_CONSOLE_INFO_QUIET=y
CONFIG_SPL=y
CONFIG_HUSH_PARSER=y
-CONFIG_SYS_PROMPT="TINY4412# "
+CONFIG_SYS_PROMPT="TINY4412 # "
CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_XIMG is not set
@@ -44,5 +44,3 @@ CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_G_DNL_MANUFACTURER="Samsung"
CONFIG_G_DNL_VENDOR_NUM=0x04e8
CONFIG_G_DNL_PRODUCT_NUM=0x6601
-
-
diff --git a/drivers/gpio/gpio-uclass.c b/drivers/gpio/gpio-uclass.c
index 9ab9df4..7709101 100644
--- a/drivers/gpio/gpio-uclass.c
+++ b/drivers/gpio/gpio-uclass.c
@@ -37,6 +37,7 @@ static int gpio_to_device(unsigned int gpio, struct gpio_desc *desc)
dev;
ret = uclass_next_device(&dev)) {
uc_priv = dev_get_uclass_priv(dev);
+
if (gpio >= uc_priv->gpio_base &&
gpio < uc_priv->gpio_base + uc_priv->gpio_count) {
desc->dev = dev;
@@ -199,11 +200,9 @@ int gpio_request(unsigned gpio, const char *label)
{
struct gpio_desc desc;
int ret;
-
ret = gpio_to_device(gpio, &desc);
if (ret)
return ret;
-
return dm_gpio_request(&desc, label);
}
diff --git a/drivers/misc/gpio_led.c b/drivers/misc/gpio_led.c
index b913069..302eed6 100644
--- a/drivers/misc/gpio_led.c
+++ b/drivers/misc/gpio_led.c
@@ -10,7 +10,7 @@
#include <asm/gpio.h>
#ifndef CONFIG_GPIO_LED_INVERTED_TABLE
-#define CONFIG_GPIO_LED_INVERTED_TABLE {}
+#define CONFIG_GPIO_LED_INVERTED_TABLE {248, 249, 250, 251}
#endif
static led_id_t gpio_led_inv[] = CONFIG_GPIO_LED_INVERTED_TABLE;
@@ -35,7 +35,6 @@ void __led_init(led_id_t mask, int state)
printf("%s: failed requesting GPIO%lu!\n", __func__, mask);
return;
}
-
gpio_value = gpio_led_gpio_value(mask, state);
gpio_direction_output(mask, gpio_value);
}
diff --git a/include/configs/tiny4412.h b/include/configs/tiny4412.h
index 6ed0b16..994ba15 100644
--- a/include/configs/tiny4412.h
+++ b/include/configs/tiny4412.h
@@ -15,6 +15,7 @@
#define CONFIG_EXYNOS4412 1 /* which is a EXYNOS4412 SoC */
#define CONFIG_TINY4412 1 /* working with TINY4412 */
+
/* DEBUG UART */
#if ! defined(CONFIG_SPL_BUILD)
#if 0
diff --git a/sd_fuse/tiny4412/auto_fuse.sh b/sd_fuse/tiny4412/auto_fuse.sh
index 7a024f5..374401a 100755
--- a/sd_fuse/tiny4412/auto_fuse.sh
+++ b/sd_fuse/tiny4412/auto_fuse.sh
@@ -2,7 +2,7 @@
#EXEC="sd_fusing.sh"
EXEC="fast_fusing.sh"
-SD_PATH="/dev/sdb"
+SD_PATH="/dev/sdd"
FUSE_PATH="./${EXEC}"
if [ -e ${FUSE_PATH} ]
diff --git a/tiny4412_config b/tiny4412_config
index e765751..f1528c0 100644
--- a/tiny4412_config
+++ b/tiny4412_config
@@ -309,7 +309,7 @@ CONFIG_SPL=y
#
CONFIG_CMDLINE=y
CONFIG_HUSH_PARSER=y
-CONFIG_SYS_PROMPT="TINY4412# "
+CONFIG_SYS_PROMPT="TINY4412 # "
#
# Autoboot options
@@ -320,10 +320,7 @@ CONFIG_AUTOBOOT=y
#
# FASTBOOT
#
-CONFIG_FASTBOOT=y
-# CONFIG_USB_FUNCTION_FASTBOOT is not set
-# CONFIG_CMD_FASTBOOT is not set
-# CONFIG_ANDROID_BOOT_IMAGE is not set
+# CONFIG_FASTBOOT is not set
#
# Commands
@@ -594,8 +591,42 @@ CONFIG_DM_KEYBOARD=y
#
# LED Support
#
-# CONFIG_LED is not set
-# CONFIG_LED_STATUS is not set
+CONFIG_LED=y
+CONFIG_LED_GPIO=y
+CONFIG_LED_STATUS=y
+CONFIG_LED_STATUS_OFF=0
+CONFIG_LED_STATUS_BLINKING=1
+CONFIG_LED_STATUS_ON=2
+CONFIG_LED_STATUS_GPIO=y
+CONFIG_LED_STATUS_BOARD_SPECIFIC=y
+
+#
+# LEDs parameters
+#
+CONFIG_LED_STATUS0=y
+CONFIG_LED_STATUS_BIT=248
+CONFIG_LED_STATUS_STATE=0
+CONFIG_LED_STATUS_FREQ=2
+CONFIG_LED_STATUS1=y
+CONFIG_LED_STATUS_BIT1=249
+CONFIG_LED_STATUS_STATE1=0
+CONFIG_LED_STATUS_FREQ1=2
+CONFIG_LED_STATUS2=y
+CONFIG_LED_STATUS_BIT2=250
+CONFIG_LED_STATUS_STATE2=0
+CONFIG_LED_STATUS_FREQ2=2
+CONFIG_LED_STATUS3=y
+CONFIG_LED_STATUS_BIT3=251
+CONFIG_LED_STATUS_STATE3=0
+CONFIG_LED_STATUS_FREQ3=2
+# CONFIG_LED_STATUS4 is not set
+# CONFIG_LED_STATUS5 is not set
+# CONFIG_LED_STATUS_BOOT_ENABLE is not set
+# CONFIG_LED_STATUS_RED_ENABLE is not set
+# CONFIG_LED_STATUS_YELLOW_ENABLE is not set
+# CONFIG_LED_STATUS_BLUE_ENABLE is not set
+# CONFIG_LED_STATUS_GREEN_ENABLE is not set
+CONFIG_LED_STATUS_CMD=y
#
# Mailbox Controller Support
(END)
- 通过
make menuconfig
配置LED时,使能选项CONFIG_LED_STATUS
,输入make,弹出输入框,需要输入参数:
CONFIG_LED_STATUS_BIT=248
CONFIG_LED_STATUS_BIT1=249
CONFIG_LED_STATUS_BIT2=250
CONFIG_LED_STATUS_BIT3=251
这些参数是gpio的数字表示法,通过映射找到最终对应的物理地址,查看开发板原理图,4个LED对应的引脚:GPM4-0、GPM4-1、GPM4-2、GPM4-3。查看文件:arch/arm/mach-exynos/include/mach/gpio.h
定义:
enum exynos4X12_gpio_pin {
EXYNOS4X12_GPIO_M40, /* 248 0xf8 */
EXYNOS4X12_GPIO_M41,
EXYNOS4X12_GPIO_M42,
EXYNOS4X12_GPIO_M43,
};
上电测试,发现设置LED OFF时,LED实际点亮。通过设置CONFIG_GPIO_LED_INVERTED_TABLE
,进行取反处理。
#ifndef CONFIG_GPIO_LED_INVERTED_TABLE
#define CONFIG_GPIO_LED_INVERTED_TABLE {248, 249, 250, 251}
#endif