本文共 7674 字,大约阅读时间需要 25 分钟。
宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64
目标板[底板]: Tiny4412SDK - 1506 目标板[核心板]: Tiny4412 - 1412 U-BOOT版本: 2017.03 交叉编译器: gcc-arm-none-eabi-5_4-2016q3 日期: 2017-05-25 11:34:46 作者: SY
git diff da4612 1e7bf5 diff --git a/arch/arm/dts/exynos4412-tiny4412.dts b/arch/arm/dts/exynos4412-tiny4412.dts index 3b80246..75e9292 100644 --- a/arch/arm/dts/exynos4412-tiny4412.dts +++ b/arch/arm/dts/exynos4412-tiny4412.dts @@ -9,6 +9,8 @@ /dts-v1/; #include "exynos4412.dtsi" +#include+ / { model = "Tiny4412 based on Exynos4412"; @@ -86,5 +101,35 @@ div = <0x3>; index = <4>; }; + + emmc-reset { + compatible = "samsung,emmc-reset"; + reset-gpio = <&gpx1 1 GPIO_ACTIVE_LOW>; + }; + + pwm@139D0000 { + compatible = "samsung,exynos4210-pwm"; + reg = <0x139D0000 0x100>; + samsung,pwm-outputs = <0>,<1>; + #pwm-cells = <3>; + enable-gpios = <&gpd0 0 GPIO_ACTIVE_HIGH>; + }; }; diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c index 3d31f9d..373e912 100644 --- a/arch/arm/mach-exynos/clock.c +++ b/arch/arm/mach-exynos/clock.c @@ -683,7 +683,6 @@ static unsigned long exynos4x12_get_pwm_clk(void) sclk = get_pll_clk(MPLL); ratio = 8; - pclk = sclk / (ratio + 1); return pclk; diff --git a/cmd/Kconfig b/cmd/Kconfig index ef53156..9843aa6 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -497,6 +497,11 @@ config CMD_GPIO help GPIO support. +config CMD_BEEP + bool "beep" + help + BEEP support. + endmenu diff --git a/cmd/Makefile b/cmd/Makefile index f13bb8c..96befba 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -28,6 +28,7 @@ obj-$(CONFIG_CMD_BOOTLDR) += bootldr.o obj-$(CONFIG_CMD_BOOTSTAGE) += bootstage.o obj-$(CONFIG_CMD_BOOTZ) += bootz.o obj-$(CONFIG_CMD_BOOTI) += booti.o +obj-$(CONFIG_CMD_BEEP) += beep.o obj-$(CONFIG_CMD_CACHE) += cache.o obj-$(CONFIG_CMD_CBFS) += cbfs.o obj-$(CONFIG_CMD_CLK) += clk.o diff --git a/cmd/beep.c b/cmd/beep.c new file mode 100644 index 0000000..2e57fe9 --- /dev/null +++ b/cmd/beep.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2017 SY <1530454315@qq.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static int do_beep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + uint channel; + uint period_ns; + uint duty_ns; + struct udevice *dev; + int ret; + bool enable = false; + + if (argc < 4) { + return CMD_RET_USAGE; + } + channel = simple_strtoul(argv[1], NULL, 10); + period_ns = simple_strtoul(argv[2], NULL, 10); + duty_ns = simple_strtoul(argv[3], NULL, 10); + + ret = uclass_get_device(UCLASS_PWM, 0, &dev); + if (ret) { + return cmd_process_error(cmdtp, ret); + } + + ret = pwm_set_config(dev, channel, period_ns, duty_ns); + if (ret) { + return cmd_process_error(cmdtp, ret); + } + + if (period_ns) { + enable = true; + } + ret = pwm_set_enable(dev, channel, enable); + if (ret) { + return cmd_process_error(cmdtp, ret); + } + +#if 0 +{ + struct gpio_desc gpio; + ret = gpio_request_by_name(dev, "enable-gpios", 0, &gpio, + GPIOD_IS_OUT); + if (ret) { + printf("%s: Warning: cannot get enable GPIO: ret=%d\n", + __func__, ret); + if (ret != -ENOENT) + return ret; + } + + mdelay(10); + dm_gpio_set_value(&gpio, 1); +} +#endif + + return cmd_process_error(cmdtp, ret); +} + +U_BOOT_CMD( + beep, 4, 1, do_beep, + "Control tiny4412 boards beep device!", + "beep [channel] [period_ns] [duty_ns]" +); diff --git a/tiny4412_config b/tiny4412_config index f1528c0..347effb 100644 --- a/tiny4412_config +++ b/tiny4412_config @@ -392,11 +392,12 @@ CONFIG_CMD_PART=y # CONFIG_CMD_SF is not set # CONFIG_CMD_SPI is not set # CONFIG_CMD_I2C is not set -# CONFIG_CMD_USB is not set +CONFIG_CMD_USB=y CONFIG_CMD_DFU=y -CONFIG_CMD_USB_MASS_STORAGE=y +# CONFIG_CMD_USB_MASS_STORAGE is not set # CONFIG_CMD_FPGA is not set # CONFIG_CMD_GPIO is not set +CONFIG_CMD_BEEP=y # # Shell scripting commands @@ -515,7 +516,9 @@ CONFIG_OF_TRANSLATE=y # # Clock # -# CONFIG_CLK is not set +CONFIG_CLK=y +# CONFIG_SPL_CLK is not set +# CONFIG_CLK_AT91 is not set # CONFIG_CPU is not set # @@ -535,7 +538,7 @@ CONFIG_OF_TRANSLATE=y # CONFIG_USB_FUNCTION_DFU=y # CONFIG_DFU_TFTP is not set -CONFIG_DFU_MMC=y +# CONFIG_DFU_MMC is not set # CONFIG_DFU_NAND is not set # CONFIG_DFU_RAM is not set # CONFIG_DFU_SF is not set @@ -725,7 +728,10 @@ CONFIG_DM_SPI_FLASH=y # CONFIG_DM_PMIC is not set # CONFIG_POWER_MC34VR500 is not set # CONFIG_DM_REGULATOR is not set -# CONFIG_DM_PWM is not set +CONFIG_DM_PWM=y +CONFIG_PWM_EXYNOS=y +# CONFIG_PWM_ROCKCHIP is not set +# CONFIG_PWM_TEGRA is not set # CONFIG_RAM is not set # @@ -812,9 +818,12 @@ CONFIG_DM_USB=y # # USB Host Controller Drivers # +CONFIG_USB_HOST=y # CONFIG_USB_XHCI_HCD is not set -# CONFIG_USB_EHCI_HCD is not set -# CONFIG_USB_EHCI is not set +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI=y +# CONFIG_USB_EHCI_MSM is not set +CONFIG_USB_EHCI_GENERIC=y # CONFIG_USB_OHCI_HCD is not set # CONFIG_USB_UHCI_HCD is not set # CONFIG_USB_DWC3 is not set @@ -833,7 +842,7 @@ CONFIG_DM_USB=y # # USB peripherals # -# CONFIG_USB_STORAGE is not set +CONFIG_USB_STORAGE=y # CONFIG_USB_KEYBOARD is not set CONFIG_USB_GADGET=y # CONFIG_USB_GADGET_ATMEL_USBA is not set @@ -844,9 +853,9 @@ CONFIG_USB_GADGET_DWC2_OTG=y CONFIG_USB_GADGET_VBUS_DRAW=2 CONFIG_USB_GADGET_DUALSPEED=y CONFIG_USB_GADGET_DOWNLOAD=y -CONFIG_G_DNL_MANUFACTURER="Samsung" -CONFIG_G_DNL_VENDOR_NUM=0x04e8 -CONFIG_G_DNL_PRODUCT_NUM=0x6601 +CONFIG_G_DNL_MANUFACTURER="samsung" +CONFIG_G_DNL_VENDOR_NUM=0x04E8 +CONFIG_G_DNL_PRODUCT_NUM=0x685D CONFIG_USBNET_DEVADDR="de:ad:be:ef:00:01" # (END)
已解决蜂鸣器问题:
diff --git a/cmd/beep.c b/cmd/beep.c index 2e57fe9..472486e 100644 --- a/cmd/beep.c +++ b/cmd/beep.c @@ -34,35 +34,20 @@ static int do_beep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return cmd_process_error(cmdtp, ret); } + pwm_set_enable(dev, channel, false); + + gpio_set_pull(EXYNOS4X12_GPIO_D00, S5P_GPIO_PULL_NONE); + gpio_cfg_pin(EXYNOS4X12_GPIO_D00, S5P_GPIO_FUNC(0x2)); + ret = pwm_set_config(dev, channel, period_ns, duty_ns); if (ret) { return cmd_process_error(cmdtp, ret); } - + if (period_ns) { enable = true; } ret = pwm_set_enable(dev, channel, enable); - if (ret) { - return cmd_process_error(cmdtp, ret); - } - -#if 0 -{ - struct gpio_desc gpio; - ret = gpio_request_by_name(dev, "enable-gpios", 0, &gpio, - GPIOD_IS_OUT); - if (ret) { - printf("%s: Warning: cannot get enable GPIO: ret=%d\n", - __func__, ret); - if (ret != -ENOENT) - return ret; - } - - mdelay(10); - dm_gpio_set_value(&gpio, 1); -} -#endif return cmd_process_error(cmdtp, ret); }
转载地址:http://zjzii.baihongyu.com/