mirror of
https://github.com/LuckfoxTECH/luckfox-pico.git
synced 2026-01-18 03:28:19 +01:00
Pullrequest mis5001 clear patch 0305 (#242)
* project/app : Add uvc_app_tiny application Signed-off-by: luckfox-eng29 <eng29@luckfox.com> * project/cfg/BoardConfig_IPC/overlay : Add Ubuntu system support for Rockit and RKNN libraries Signed-off-by: luckfox-eng29 <eng29@luckfox.com> * sysdrv/source/kernel/drivers/of : Add support for dynamic device tree Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/drivers/usb/serial : Add CH343 driver support Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/drivers/staging : Disable partial logging of fbtft Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/drivers/pinctrl/pinctrl-rockchip.h : Fix pinctrl configuration failure issue Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/include/dt-bindings/soc/rockchip,boot-mode.h : Add support for the reboot U-Boot command in the BusyBox system Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/drivers/video : Add logo display support for LF40-480480-ARK and LF40-720720-ARK Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/arch/arm/boot/dts : Add device tree files for the Luckfox RV1103/RV1106 series boards Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/arch/arm/configs : Add device tree files for the Luckfox RV1103/RV1106 series boards Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/uboot/u-boot/drivers/mmc/mmc.c : Fix the issue where some Micro SD cards fail to boot Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/uboot/u-boot/common/image-fit.c : Add U-Boot support for luckfox-config Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/uboot/rkbin/bin/rv11 : Add firmware with a serial baud rate of 115200 and back up the original firmware Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/uboot/u-boot/arch/arm/dts : Add device tree files for the Luckfox RV1103/RV1106 series boards Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/uboot/u-boot/configs : Add defconfig files for the Luckfox RV1103/RV1106 series boards Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/uboot/u-boot : Add support for the reboot U-Boot command in the BusyBox system Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/drivers/media/i2c : Add MIS5001 driver support Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/source/kernel/arch/arm : Add default support for MIS5001 on Luckfox RV1106 series boards Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/tools/board : Delete irrelevant overwrite files and patch files Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/drv_ko/insmod_ko.sh : Register mis5001 driver during boot process Signed-off-by: luckfox-eng29 <eng29@luckfox.com> * media/isp/release_camera_engine_rkaiq_rv1106_arm-rockchip830-linux-uclibcgnueabihf/isp_iqfiles : Add mis5001 iqfile Signed-off-by: luckfox-eng29 <eng29@luckfox.com> * project/app/rkipc/rkipc/src/rv1106_ipc : Add rkipc application support for mis5001 sensor Signed-off-by: eng29 <eng29@luckfox.com> * project/cfg/BoardConfig_IPC : Enable default retrieval of mis5001 iqfile and include ROCKIT and RKNN libraries of RV1106 series board Signed-off-by: luckfox-eng29 <eng29@luckfox.com> * project/build.sh : Remove operations related to applying and deleting patches Signed-off-by: eng29 <eng29@luckfox.com> * project/build.sh : Modify build system menu description; Apply lightweight system processing only during Buildroot and BusyBox system compilation Signed-off-by: eng29 <eng29@luckfox.com> * sysdrv/tools/board/buildroot/luckfox_pico_w_defconfig : Add pppd and pgrep for 4G module Signed-off-by: luckfox-eng29 <eng29@luckfox.com> * sysdrv/tools/board/kernel/rv1106-luckfox-pico-ultra-ipc.dtsi : Add uart4m1 support for lastest luckfox-config tool Signed-off-by: eng29 <eng29@luckfox.com> --------- Signed-off-by: luckfox-eng29 <eng29@luckfox.com> Signed-off-by: eng29 <eng29@luckfox.com>
This commit is contained in:
@@ -14,7 +14,7 @@ __insmod()
|
||||
|
||||
__rmmod_camera_sensor()
|
||||
{
|
||||
for item in `echo "imx415 os04a10 sc4336 sc3336 sc530ai gc2053 sc200ai sc401ai sc450ai techpoint"`
|
||||
for item in `echo "imx415 os04a10 sc4336 sc3336 sc530ai gc2053 sc200ai sc401ai sc450ai techpoint mis5001"`
|
||||
do
|
||||
if lsmod | grep $item | awk '{print $3}' |grep -w 0;then
|
||||
rmmod $item
|
||||
@@ -56,6 +56,7 @@ __insmod sc200ai.ko
|
||||
__insmod sc401ai.ko
|
||||
__insmod sc450ai.ko
|
||||
__insmod techpoint.ko
|
||||
__insmod mis5001.ko
|
||||
|
||||
__insmod video_rkcif.ko
|
||||
__insmod video_rkisp.ko
|
||||
|
||||
@@ -124,13 +124,7 @@
|
||||
|
||||
csi_dphy_input1: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&sc4336_out>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
|
||||
csi_dphy_input2: endpoint@2 {
|
||||
reg = <2>;
|
||||
remote-endpoint = <&sc530ai_out>;
|
||||
remote-endpoint = <&mis5001_out>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
@@ -175,34 +169,13 @@
|
||||
};
|
||||
};
|
||||
|
||||
sc4336: sc4336@30 {
|
||||
compatible = "smartsens,sc4336";
|
||||
mis5001: mis5001@31 {
|
||||
compatible = "imagedesign,mis5001";
|
||||
status = "okay";
|
||||
reg = <0x30>;
|
||||
reg = <0x31>;
|
||||
clocks = <&cru MCLK_REF_MIPI0>;
|
||||
clock-names = "xvclk";
|
||||
pwdn-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mipi_refclk_out0>;
|
||||
rockchip,camera-module-index = <0>;
|
||||
rockchip,camera-module-facing = "back";
|
||||
rockchip,camera-module-name = "OT01";
|
||||
rockchip,camera-module-lens-name = "40IRC_F16";
|
||||
port {
|
||||
sc4336_out: endpoint {
|
||||
remote-endpoint = <&csi_dphy_input1>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
sc530ai: sc530ai@30 {
|
||||
compatible = "smartsens,sc530ai";
|
||||
status = "okay";
|
||||
reg = <0x30>;
|
||||
clocks = <&cru MCLK_REF_MIPI0>;
|
||||
clock-names = "xvclk";
|
||||
pwdn-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mipi_refclk_out0>;
|
||||
rockchip,camera-module-index = <0>;
|
||||
@@ -210,8 +183,8 @@
|
||||
rockchip,camera-module-name = "CMK-OT2115-PC1";
|
||||
rockchip,camera-module-lens-name = "30IRC-F16";
|
||||
port {
|
||||
sc530ai_out: endpoint {
|
||||
remote-endpoint = <&csi_dphy_input2>;
|
||||
mis5001_out: endpoint {
|
||||
remote-endpoint = <&csi_dphy_input1>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
@@ -189,7 +189,7 @@
|
||||
|
||||
&acodec {
|
||||
#sound-dai-cells = <0>;
|
||||
pa-ctl-gpios = <&gpio3 RK_PD3 GPIO_ACTIVE_HIGH>;
|
||||
pa-ctl-gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -249,6 +249,11 @@
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
|
||||
csi_dphy_input1: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&mis5001_out>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
@@ -290,6 +295,27 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mis5001: mis5001@31 {
|
||||
compatible = "imagedesign,mis5001";
|
||||
status = "okay";
|
||||
reg = <0x31>;
|
||||
clocks = <&cru MCLK_REF_MIPI0>;
|
||||
clock-names = "xvclk";
|
||||
reset-gpios = <&gpio3 RK_PC5 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&mipi_refclk_out0>;
|
||||
rockchip,camera-module-index = <0>;
|
||||
rockchip,camera-module-facing = "back";
|
||||
rockchip,camera-module-name = "CMK-OT2115-PC1";
|
||||
rockchip,camera-module-lens-name = "30IRC-F16";
|
||||
port {
|
||||
mis5001_out: endpoint {
|
||||
remote-endpoint = <&csi_dphy_input1>;
|
||||
data-lanes = <1 2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&mipi0_csi2 {
|
||||
@@ -470,7 +496,7 @@
|
||||
pinctrl-0 = <&uart3m0_xfer &uart3m1_xfer>;
|
||||
};
|
||||
&uart4 {
|
||||
pinctrl-0 = <&uart4m0_xfer>;
|
||||
pinctrl-0 = <&uart4m0_xfer &uart4m1_xfer>;
|
||||
};
|
||||
&uart5 {
|
||||
pinctrl-0 = <&uart5m1_xfer>;
|
||||
@@ -196,6 +196,7 @@ CONFIG_V4L_PLATFORM_DRIVERS=y
|
||||
CONFIG_VIDEO_ROCKCHIP_CIF=m
|
||||
CONFIG_VIDEO_ROCKCHIP_ISP=m
|
||||
CONFIG_VIDEO_RK_IRCUT=y
|
||||
CONFIG_VIDEO_MIS5001=m
|
||||
CONFIG_VIDEO_SC3336=m
|
||||
CONFIG_DRM=y
|
||||
CONFIG_DRM_EDID=y
|
||||
7
sysdrv/source/kernel/arch/arm/configs/rv1106-bt.config
Normal file
7
sysdrv/source/kernel/arch/arm/configs/rv1106-bt.config
Normal file
@@ -0,0 +1,7 @@
|
||||
CONFIG_BT=y
|
||||
CONFIG_BT_RFCOMM=y
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_HCIUART=y
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_RFKILL=y
|
||||
CONFIG_RFKILL_RK=y
|
||||
@@ -1854,6 +1854,16 @@ config VIDEO_MIS4001
|
||||
This is a Video4Linux2 sensor driver for the ImageDesign
|
||||
MIS4001 camera.
|
||||
|
||||
config VIDEO_MIS5001
|
||||
tristate "ImageDesign mis5001 sensor support"
|
||||
depends on I2C && VIDEO_V4L2
|
||||
select MEDIA_CONTROLLER
|
||||
select VIDEO_V4L2_SUBDEV_API
|
||||
select V4L2_FWNODE
|
||||
help
|
||||
This is a Video4Linux2 sensor driver for the ImageDesign
|
||||
MIS5001 camera.
|
||||
|
||||
config VIDEO_MT9M001
|
||||
tristate "mt9m001 support"
|
||||
depends on I2C && VIDEO_V4L2
|
||||
|
||||
@@ -119,6 +119,7 @@ obj-$(CONFIG_VIDEO_OV13855) += ov13855.o
|
||||
obj-$(CONFIG_VIDEO_OV13858) += ov13858.o
|
||||
obj-$(CONFIG_VIDEO_MIS2031) += mis2031.o
|
||||
obj-$(CONFIG_VIDEO_MIS4001) += mis4001.o
|
||||
obj-$(CONFIG_VIDEO_MIS5001) += mis5001.o
|
||||
obj-$(CONFIG_VIDEO_MT9M001) += mt9m001.o
|
||||
obj-$(CONFIG_VIDEO_MT9M032) += mt9m032.o
|
||||
obj-$(CONFIG_VIDEO_MT9M111) += mt9m111.o
|
||||
|
||||
1661
sysdrv/source/kernel/drivers/media/i2c/mis5001.c
Normal file
1661
sysdrv/source/kernel/drivers/media/i2c/mis5001.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -121,4 +121,11 @@ config OF_DMA_DEFAULT_COHERENT
|
||||
# arches should select this if DMA is coherent by default for OF devices
|
||||
bool
|
||||
|
||||
config OF_DTBO
|
||||
bool "Device Tree DTBO"
|
||||
select OF_DYNAMIC
|
||||
select OF_FLATTREE
|
||||
select OF_RESOLVE
|
||||
help
|
||||
Device Tree DTBO
|
||||
endif # OF
|
||||
|
||||
@@ -13,5 +13,6 @@ obj-$(CONFIG_OF_RESERVED_MEM) += of_reserved_mem.o
|
||||
obj-$(CONFIG_OF_RESOLVE) += resolver.o
|
||||
obj-$(CONFIG_OF_OVERLAY) += overlay.o
|
||||
obj-$(CONFIG_OF_NUMA) += of_numa.o
|
||||
obj-$(CONFIG_OF_DTBO) += dtbocfg.o
|
||||
|
||||
obj-$(CONFIG_OF_UNITTEST) += unittest-data/
|
||||
|
||||
429
sysdrv/source/kernel/drivers/of/dtbocfg.c
Normal file
429
sysdrv/source/kernel/drivers/of/dtbocfg.c
Normal file
@@ -0,0 +1,429 @@
|
||||
/*********************************************************************************
|
||||
*
|
||||
* Copyright (C) 2016-2023 Ichiro Kawazome
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. 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.
|
||||
*
|
||||
* 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 THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS 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 <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/configfs.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/limits.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
#define DRIVER_NAME "dtbocfg"
|
||||
#define DRIVER_VERSION "0.1.0"
|
||||
|
||||
/**
|
||||
* Device Tree Overlay Item Structure
|
||||
*/
|
||||
struct dtbocfg_overlay_item {
|
||||
struct config_item item;
|
||||
#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0))
|
||||
struct device_node* node;
|
||||
#endif
|
||||
int id;
|
||||
void* dtbo;
|
||||
int dtbo_size;
|
||||
};
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_create() - Create Device Tree Overlay
|
||||
* @overlay: Pointer to Device Tree Overlay Item
|
||||
* return Success(0) or Error Status.
|
||||
*/
|
||||
static int dtbocfg_overlay_item_create(struct dtbocfg_overlay_item *overlay)
|
||||
{
|
||||
int ret_val;
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0))
|
||||
{
|
||||
int ovcs_id = 0;
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 6, 0))
|
||||
ret_val = of_overlay_fdt_apply(overlay->dtbo,overlay->dtbo_size, &ovcs_id, NULL);
|
||||
#else
|
||||
ret_val = of_overlay_fdt_apply(overlay->dtbo,overlay->dtbo_size, &ovcs_id);
|
||||
#endif
|
||||
if (ret_val != 0) {
|
||||
pr_err("%s: Failed to apply overlay (ret_val=%d)\n", __func__, ret_val);
|
||||
goto failed;
|
||||
}
|
||||
overlay->id = ovcs_id;
|
||||
pr_debug("%s: apply OK(id=%d)\n", __func__, ovcs_id);
|
||||
}
|
||||
#else
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
|
||||
of_fdt_unflatten_tree(overlay->dtbo, NULL, &overlay->node);
|
||||
#else
|
||||
of_fdt_unflatten_tree(overlay->dtbo, &overlay->node);
|
||||
#endif
|
||||
if (overlay->node == NULL) {
|
||||
pr_err("%s: failed to unflatten tree\n", __func__);
|
||||
ret_val = -EINVAL;
|
||||
goto failed;
|
||||
}
|
||||
pr_debug("%s: unflattened OK\n", __func__);
|
||||
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
||||
{
|
||||
int ovcs_id = 0;
|
||||
|
||||
ret_val = of_overlay_apply(overlay->node, &ovcs_id);
|
||||
if (ret_val != 0) {
|
||||
pr_err("%s: Failed to apply overlay (ret_val=%d)\n", __func__, ret_val);
|
||||
goto failed;
|
||||
}
|
||||
overlay->id = ovcs_id;
|
||||
pr_debug("%s: apply OK(id=%d)\n", __func__, ovcs_id);
|
||||
}
|
||||
#else
|
||||
{
|
||||
of_node_set_flag(overlay->node, OF_DETACHED);
|
||||
|
||||
ret_val = of_resolve_phandles(overlay->node);
|
||||
if (ret_val != 0) {
|
||||
pr_err("%s: Failed to resolve tree\n", __func__);
|
||||
goto failed;
|
||||
}
|
||||
pr_debug("%s: resolved OK\n", __func__);
|
||||
|
||||
ret_val = of_overlay_create(overlay->node);
|
||||
if (ret_val < 0) {
|
||||
pr_err("%s: Failed to create overlay (ret_val=%d)\n", __func__, ret_val);
|
||||
goto failed;
|
||||
}
|
||||
overlay->id = ret_val;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
pr_debug("%s: create OK\n", __func__);
|
||||
return 0;
|
||||
|
||||
failed:
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_item_release() - Relase Device Tree Overlay
|
||||
* @overlay: Pointer to Device Tree Overlay Item
|
||||
* return none
|
||||
*/
|
||||
static void dtbocfg_overlay_item_release(struct dtbocfg_overlay_item *overlay)
|
||||
{
|
||||
if (overlay->id >= 0) {
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 15, 0))
|
||||
of_overlay_remove(&overlay->id);
|
||||
#else
|
||||
of_overlay_destroy(overlay->id);
|
||||
#endif
|
||||
overlay->id = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* container_of_dtbocfg_overlay_item() - Get Device Tree Overlay Item Pointer from Configuration Item
|
||||
* @item: Pointer to Configuration Item
|
||||
* return Pointer to Device Tree Overlay Item
|
||||
*/
|
||||
static inline struct dtbocfg_overlay_item* container_of_dtbocfg_overlay_item(struct config_item *item)
|
||||
{
|
||||
return item ? container_of(item, struct dtbocfg_overlay_item, item) : NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_item_status_store() - Set Status Attibute
|
||||
* @item: Pointer to Configuration Item
|
||||
* @page: Pointer to Value Buffer
|
||||
* @count: Size of Value Buffer Size
|
||||
* return Stored Size or Error Status.
|
||||
*/
|
||||
static ssize_t dtbocfg_overlay_item_status_store(struct config_item *item, const char *buf, size_t count)
|
||||
{
|
||||
struct dtbocfg_overlay_item *overlay = container_of_dtbocfg_overlay_item(item);
|
||||
ssize_t status;
|
||||
unsigned long value;
|
||||
if (0 != (status = kstrtoul(buf, 10, &value))) {
|
||||
goto failed;
|
||||
}
|
||||
if (value == 0) {
|
||||
if (overlay->id >= 0) {
|
||||
dtbocfg_overlay_item_release(overlay);
|
||||
}
|
||||
} else {
|
||||
if (overlay->id < 0) {
|
||||
dtbocfg_overlay_item_create(overlay);
|
||||
}
|
||||
}
|
||||
return count;
|
||||
failed:
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_item_status_show() - Show Status Attibute
|
||||
* @item : Pointer to Configuration Item
|
||||
* @page : Pointer to Value for Store
|
||||
* return String Size or Error Status.
|
||||
*/
|
||||
static ssize_t dtbocfg_overlay_item_status_show(struct config_item *item, char *page)
|
||||
{
|
||||
struct dtbocfg_overlay_item *overlay = container_of_dtbocfg_overlay_item(item);
|
||||
return sprintf(page, "%d\n", overlay->id >= 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_item_dtbo_write() - Write Device Tree Blob to Configuration Item
|
||||
* @item : Pointer to Configuration Item
|
||||
* @page : Pointer to Value Buffer
|
||||
* @count: Size of Value Buffer
|
||||
* return Stored Size or Error Status.
|
||||
*/
|
||||
static ssize_t dtbocfg_overlay_item_dtbo_write(struct config_item *item, const void *buf, size_t count)
|
||||
{
|
||||
struct dtbocfg_overlay_item *overlay = container_of_dtbocfg_overlay_item(item);
|
||||
|
||||
if (overlay->dtbo_size > 0) {
|
||||
if (overlay->id >= 0) {
|
||||
return -EPERM;
|
||||
}
|
||||
kfree(overlay->dtbo);
|
||||
overlay->dtbo = NULL;
|
||||
overlay->dtbo_size = 0;
|
||||
}
|
||||
|
||||
overlay->dtbo = kmemdup(buf, count, GFP_KERNEL);
|
||||
if (overlay->dtbo == NULL) {
|
||||
overlay->dtbo_size = 0;
|
||||
return -ENOMEM;
|
||||
} else {
|
||||
overlay->dtbo_size = count;
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_item_dtbo_read() - Read Device Tree Blob from Configuration Item
|
||||
* @item : Pointer to Configuration Item
|
||||
* @page : Pointer to Value for Store, or NULL to query the buffer size
|
||||
* @size : Size of the supplied buffer
|
||||
* return Read Size
|
||||
*/
|
||||
static ssize_t dtbocfg_overlay_item_dtbo_read(struct config_item *item, void *buf, size_t size)
|
||||
{
|
||||
struct dtbocfg_overlay_item *overlay = container_of_dtbocfg_overlay_item(item);
|
||||
|
||||
if (overlay->dtbo == NULL)
|
||||
return 0;
|
||||
|
||||
if (buf != NULL)
|
||||
memcpy(buf, overlay->dtbo, overlay->dtbo_size);
|
||||
|
||||
return overlay->dtbo_size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Device Tree Blob Overlay Attribute Structure
|
||||
*/
|
||||
CONFIGFS_BIN_ATTR(dtbocfg_overlay_item_, dtbo, NULL, 1024 * 1024); // 1MiB should be way more than enough
|
||||
CONFIGFS_ATTR(dtbocfg_overlay_item_, status);
|
||||
|
||||
static struct configfs_attribute *dtbocfg_overlay_attrs[] = {
|
||||
&dtbocfg_overlay_item_attr_status,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct configfs_bin_attribute *dtbocfg_overlay_bin_attrs[] = {
|
||||
&dtbocfg_overlay_item_attr_dtbo,
|
||||
NULL,
|
||||
};
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_release() - Release Device Tree Overlay Item
|
||||
* @item : Pointer to Configuration Item
|
||||
* Return None
|
||||
*/
|
||||
static void dtbocfg_overlay_release(struct config_item *item)
|
||||
{
|
||||
struct dtbocfg_overlay_item *overlay = container_of_dtbocfg_overlay_item(item);
|
||||
|
||||
pr_debug("%s\n", __func__);
|
||||
|
||||
dtbocfg_overlay_item_release(overlay);
|
||||
|
||||
if (overlay->dtbo) {
|
||||
kfree(overlay->dtbo);
|
||||
overlay->dtbo = NULL;
|
||||
overlay->dtbo_size = 0;
|
||||
}
|
||||
|
||||
kfree(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* Device Tree Blob Overlay Item Structure
|
||||
*/
|
||||
static struct configfs_item_operations dtbocfg_overlay_item_ops = {
|
||||
.release = dtbocfg_overlay_release,
|
||||
};
|
||||
|
||||
static struct config_item_type dtbocfg_overlay_item_type = {
|
||||
.ct_item_ops = &dtbocfg_overlay_item_ops,
|
||||
.ct_attrs = dtbocfg_overlay_attrs,
|
||||
.ct_bin_attrs = dtbocfg_overlay_bin_attrs,
|
||||
.ct_owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_group_make_item() - Make Device Tree Overlay Group Item
|
||||
* @group: Pointer to Configuration Group
|
||||
* @name : Pointer to Group Name
|
||||
* Return Pointer to Device Tree Overlay Group Item
|
||||
*/
|
||||
static struct config_item *dtbocfg_overlay_group_make_item(struct config_group *group, const char *name)
|
||||
{
|
||||
struct dtbocfg_overlay_item *overlay;
|
||||
|
||||
pr_debug("%s\n", __func__);
|
||||
|
||||
overlay = kzalloc(sizeof(*overlay), GFP_KERNEL);
|
||||
|
||||
if (!overlay)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
overlay->id = -1;
|
||||
overlay->dtbo = NULL;
|
||||
overlay->dtbo_size = 0;
|
||||
|
||||
config_item_init_type_name(&overlay->item, name, &dtbocfg_overlay_item_type);
|
||||
return &overlay->item;
|
||||
}
|
||||
|
||||
/**
|
||||
* dtbocfg_overlay_group_drop_item() - Drop Device Tree Overlay Group Item
|
||||
* @group: Pointer to Configuration Group
|
||||
* @item : Pointer to Device Tree Overlay Group Item
|
||||
*/
|
||||
static void dtbocfg_overlay_group_drop_item(struct config_group *group, struct config_item *item)
|
||||
{
|
||||
struct dtbocfg_overlay_item *overlay = container_of_dtbocfg_overlay_item(item);
|
||||
|
||||
pr_debug("%s\n", __func__);
|
||||
|
||||
config_item_put(&overlay->item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Device Tree Blob Overlay Sub Group Structures
|
||||
*/
|
||||
static struct configfs_group_operations dtbocfg_overlays_ops = {
|
||||
.make_item = dtbocfg_overlay_group_make_item,
|
||||
.drop_item = dtbocfg_overlay_group_drop_item,
|
||||
};
|
||||
|
||||
static struct config_item_type dtbocfg_overlays_type = {
|
||||
.ct_group_ops = &dtbocfg_overlays_ops,
|
||||
.ct_owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
static struct config_group dtbocfg_overlay_group;
|
||||
|
||||
/**
|
||||
* Device Tree Blob Overlay Root Sub System Structures
|
||||
*/
|
||||
static struct configfs_group_operations dtbocfg_root_ops = {
|
||||
/* empty - we don't allow anything to be created */
|
||||
};
|
||||
|
||||
static struct config_item_type dtbocfg_root_type = {
|
||||
.ct_group_ops = &dtbocfg_root_ops,
|
||||
.ct_owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
static struct configfs_subsystem dtbocfg_root_subsys = {
|
||||
.su_group = {
|
||||
.cg_item = {
|
||||
.ci_namebuf = "device-tree",
|
||||
.ci_type = &dtbocfg_root_type,
|
||||
},
|
||||
},
|
||||
.su_mutex = __MUTEX_INITIALIZER(dtbocfg_root_subsys.su_mutex),
|
||||
};
|
||||
|
||||
/**
|
||||
* dtbocfg_module_init()
|
||||
*/
|
||||
static int __init dtbocfg_module_init(void)
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
pr_info(DRIVER_NAME ": " DRIVER_VERSION "\n");
|
||||
|
||||
config_group_init(&dtbocfg_root_subsys.su_group);
|
||||
config_group_init_type_name(&dtbocfg_overlay_group, "overlays", &dtbocfg_overlays_type);
|
||||
|
||||
retval = configfs_register_subsystem(&dtbocfg_root_subsys);
|
||||
if (retval != 0) {
|
||||
pr_err( "%s: couldn't register subsys\n", __func__);
|
||||
goto register_subsystem_failed;
|
||||
}
|
||||
|
||||
retval = configfs_register_group(&dtbocfg_root_subsys.su_group, &dtbocfg_overlay_group);
|
||||
if (retval != 0) {
|
||||
pr_err( "%s: couldn't register group\n", __func__);
|
||||
goto register_group_failed;
|
||||
}
|
||||
|
||||
pr_info(DRIVER_NAME ": OK\n");
|
||||
return 0;
|
||||
|
||||
register_group_failed:
|
||||
configfs_unregister_subsystem(&dtbocfg_root_subsys);
|
||||
register_subsystem_failed:
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* dtbocfg_module_exit()
|
||||
*/
|
||||
static void __exit dtbocfg_module_exit(void)
|
||||
{
|
||||
configfs_unregister_group(&dtbocfg_overlay_group);
|
||||
configfs_unregister_subsystem(&dtbocfg_root_subsys);
|
||||
}
|
||||
|
||||
module_init(dtbocfg_module_init);
|
||||
module_exit(dtbocfg_module_exit);
|
||||
|
||||
MODULE_AUTHOR("ikwzm");
|
||||
MODULE_DESCRIPTION("Device Tree Overlay Configuration File System");
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
@@ -170,7 +170,9 @@ static int overlay_notify(struct overlay_changeset *ovcs,
|
||||
|
||||
ret = blocking_notifier_call_chain(&overlay_notify_chain,
|
||||
action, &nd);
|
||||
if (notifier_to_errno(ret)) {
|
||||
if (ret == NOTIFY_OK || ret == NOTIFY_STOP)
|
||||
return 0;
|
||||
if (ret) {
|
||||
ret = notifier_to_errno(ret);
|
||||
pr_err("overlay changeset %s notifier error %d, target: %pOF\n",
|
||||
of_overlay_action_name[action], ret, nd.target);
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
#ifndef _PINCTRL_ROCKCHIP_H
|
||||
#define _PINCTRL_ROCKCHIP_H
|
||||
|
||||
#include <linux/gpio/driver.h>
|
||||
|
||||
#define RK_GPIO0_A0 0
|
||||
#define RK_GPIO0_A1 1
|
||||
#define RK_GPIO0_A2 2
|
||||
|
||||
@@ -292,9 +292,9 @@ static void fbtft_update_display(struct fbtft_par *par, unsigned int start_line,
|
||||
throughput = throughput ? (len * 1000) / throughput : 0;
|
||||
throughput = throughput * 1000 / 1024;
|
||||
|
||||
dev_info(par->info->device,
|
||||
"Display update: %ld kB/s, fps=%ld\n",
|
||||
throughput, fps);
|
||||
// dev_info(par->info->device,
|
||||
// "Display update: %ld kB/s, fps=%ld\n",
|
||||
// throughput, fps);
|
||||
par->first_update_done = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -407,7 +407,7 @@ do { \
|
||||
dev_info(dev, format, ##arg); \
|
||||
} while (0)
|
||||
|
||||
#define fbtft_par_dbg(level, par, format, arg...) \
|
||||
/*#define fbtft_par_dbg(level, par, format, arg...) \
|
||||
do { \
|
||||
if (unlikely((par)->debug & (level))) \
|
||||
dev_info((par)->info->device, format, ##arg); \
|
||||
@@ -418,6 +418,9 @@ do { \
|
||||
if (unlikely((par)->debug & (level))) \
|
||||
fbtft_dbg_hex(dev, sizeof(type), buf,\
|
||||
(num) * sizeof(type), format, ##arg); \
|
||||
} while (0)
|
||||
} while (0)*/
|
||||
|
||||
#define fbtft_par_dbg(level, par, format, arg...) ;
|
||||
#define fbtft_par_dbg_hex(level, par, dev, type, buf, num, format, arg...) ;
|
||||
|
||||
#endif /* __LINUX_FBTFT_H */
|
||||
|
||||
@@ -112,6 +112,15 @@ config USB_SERIAL_CH341
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called ch341.
|
||||
|
||||
config USB_SERIAL_CH343
|
||||
tristate "USB Winchiphead CH343 Single Port Serial Driver"
|
||||
help
|
||||
Say Y here if you want to use a Winchiphead CH343 single port
|
||||
USB to serial adapter.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called ch343.
|
||||
|
||||
config USB_SERIAL_WHITEHEAT
|
||||
tristate "USB ConnectTech WhiteHEAT Serial Driver"
|
||||
select USB_EZUSB_FX2
|
||||
|
||||
@@ -15,6 +15,7 @@ obj-$(CONFIG_USB_SERIAL_AIRCABLE) += aircable.o
|
||||
obj-$(CONFIG_USB_SERIAL_ARK3116) += ark3116.o
|
||||
obj-$(CONFIG_USB_SERIAL_BELKIN) += belkin_sa.o
|
||||
obj-$(CONFIG_USB_SERIAL_CH341) += ch341.o
|
||||
obj-$(CONFIG_USB_SERIAL_CH343) += ch343.o
|
||||
obj-$(CONFIG_USB_SERIAL_CP210X) += cp210x.o
|
||||
obj-$(CONFIG_USB_SERIAL_CYBERJACK) += cyberjack.o
|
||||
obj-$(CONFIG_USB_SERIAL_CYPRESS_M8) += cypress_m8.o
|
||||
|
||||
2000
sysdrv/source/kernel/drivers/usb/serial/ch343.c
Executable file
2000
sysdrv/source/kernel/drivers/usb/serial/ch343.c
Executable file
File diff suppressed because it is too large
Load Diff
243
sysdrv/source/kernel/drivers/usb/serial/ch343.h
Executable file
243
sysdrv/source/kernel/drivers/usb/serial/ch343.h
Executable file
@@ -0,0 +1,243 @@
|
||||
#ifndef _CH343_H
|
||||
#define _CH343_H
|
||||
|
||||
/*
|
||||
* Baud rate and default timeout
|
||||
*/
|
||||
#define DEFAULT_BAUD_RATE 9600
|
||||
#define DEFAULT_TIMEOUT 2000
|
||||
|
||||
/*
|
||||
* CMSPAR, some architectures can't have space and mark parity.
|
||||
*/
|
||||
|
||||
#ifndef CMSPAR
|
||||
#define CMSPAR 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Major and minor numbers.
|
||||
*/
|
||||
|
||||
#define CH343_TTY_MAJOR 170
|
||||
#define CH343_TTY_MINORS 256
|
||||
|
||||
#define USB_MINOR_BASE 70
|
||||
|
||||
/*
|
||||
* Requests.
|
||||
*/
|
||||
|
||||
#define USB_RT_CH343 (USB_TYPE_CLASS | USB_RECIP_INTERFACE)
|
||||
|
||||
#define CMD_R 0x95
|
||||
#define CMD_W 0x9A
|
||||
#define CMD_C1 0xA1
|
||||
#define CMD_C2 0xA4
|
||||
#define CMD_C3 0x05
|
||||
#define CMD_C4 0xA8
|
||||
#define CMD_C5 0x5E
|
||||
#define CMD_C6 0x5F
|
||||
|
||||
#define CH343_CTO_O 0x10
|
||||
#define CH343_CTO_D 0x20
|
||||
#define CH343_CTO_R 0x40
|
||||
#define CH343_CTO_A 0x80
|
||||
#define CH343_CTI_C 0x01
|
||||
#define CH343_CTI_DS 0x02
|
||||
#define CH343_CTI_R 0x04
|
||||
#define CH343_CTI_DC 0x08
|
||||
#define CH343_CTI_ST 0x0f
|
||||
|
||||
#define CH343_CTT_M 0x08
|
||||
#define CH343_CTT_F 0x44
|
||||
#define CH343_CTT_P 0x04
|
||||
#define CH343_CTT_O 0x02
|
||||
|
||||
#define CH343_LO 0x02
|
||||
#define CH343_LE 0x04
|
||||
#define CH343_LB
|
||||
#define CH343_LP 0x00
|
||||
#define CH343_LF 0x40
|
||||
#define CH343_LM 0x08
|
||||
|
||||
#define CH343_L_R_CT 0x80
|
||||
#define CH343_L_R_CL 0x04
|
||||
#define CH343_L_R_T 0x08
|
||||
|
||||
#define CH343_L_E_R 0x80
|
||||
#define CH343_L_E_T 0x40
|
||||
#define CH343_L_P_S 0x38
|
||||
#define CH343_L_P_M 0x28
|
||||
#define CH343_L_P_E 0x18
|
||||
#define CH343_L_P_O 0x08
|
||||
#define CH343_L_SB 0x04
|
||||
#define CH343_L_C8 0x03
|
||||
#define CH343_L_C7 0x02
|
||||
#define CH343_L_C6 0x01
|
||||
#define CH343_L_C5 0x00
|
||||
|
||||
#define CH343_N_B 0x80
|
||||
#define CH343_N_AB 0x10
|
||||
|
||||
/*
|
||||
* Internal driver structures.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The only reason to have several buffers is to accommodate assumptions
|
||||
* in line disciplines. They ask for empty space amount, receive our URB size,
|
||||
* and proceed to issue several 1-character writes, assuming they will fit.
|
||||
* The very first write takes a complete URB. Fortunately, this only happens
|
||||
* when processing onlcr, so we only need 2 buffers. These values must be
|
||||
* powers of 2.
|
||||
*/
|
||||
#define CH343_NW 16
|
||||
#define CH343_NR 16
|
||||
|
||||
struct ch343_wb {
|
||||
unsigned char *buf;
|
||||
dma_addr_t dmah;
|
||||
int len;
|
||||
int use;
|
||||
struct urb *urb;
|
||||
struct ch343 *instance;
|
||||
};
|
||||
|
||||
struct ch343_rb {
|
||||
int size;
|
||||
unsigned char *base;
|
||||
dma_addr_t dma;
|
||||
int index;
|
||||
struct ch343 *instance;
|
||||
};
|
||||
|
||||
struct usb_ch343_line_coding {
|
||||
__u32 dwDTERate;
|
||||
__u8 bCharFormat;
|
||||
#define USB_CH343_1_STOP_BITS 0
|
||||
#define USB_CH343_1_5_STOP_BITS 1
|
||||
#define USB_CH343_2_STOP_BITS 2
|
||||
|
||||
__u8 bParityType;
|
||||
#define USB_CH343_NO_PARITY 0
|
||||
#define USB_CH343_ODD_PARITY 1
|
||||
#define USB_CH343_EVEN_PARITY 2
|
||||
#define USB_CH343_MARK_PARITY 3
|
||||
#define USB_CH343_SPACE_PARITY 4
|
||||
|
||||
__u8 bDataBits;
|
||||
} __attribute__((packed));
|
||||
|
||||
typedef enum {
|
||||
CHIP_CH342F = 0x00,
|
||||
CHIP_CH342K,
|
||||
CHIP_CH343GP,
|
||||
CHIP_CH343G_AUTOBAUD,
|
||||
CHIP_CH343K,
|
||||
CHIP_CH343J,
|
||||
CHIP_CH344L,
|
||||
CHIP_CH344L_V2,
|
||||
CHIP_CH344Q,
|
||||
CHIP_CH347T,
|
||||
CHIP_CH9101UH,
|
||||
CHIP_CH9101RY,
|
||||
CHIP_CH9102F,
|
||||
CHIP_CH9102X,
|
||||
CHIP_CH9103M,
|
||||
CHIP_CH9104L,
|
||||
} CHIPTYPE;
|
||||
|
||||
struct gpioinfo {
|
||||
int group;
|
||||
int pin;
|
||||
};
|
||||
|
||||
struct ch343_gpio {
|
||||
int gpiocount;
|
||||
struct gpioinfo io[64];
|
||||
};
|
||||
|
||||
struct ch343_gpio ch343_gpios[] = {
|
||||
{ 0, {}},
|
||||
{ 0, {}},
|
||||
{ 0, {}},
|
||||
{ 0, {}},
|
||||
{ 0, {}},
|
||||
{ 0, {}},
|
||||
/* CH344L */
|
||||
{ 8, {}},
|
||||
/* CH344L-V2 */
|
||||
{ 8, {}},
|
||||
/* CH344Q */
|
||||
{ 8, {}},
|
||||
/* CH347T */
|
||||
{ 4, {}},
|
||||
/* CH9101UH */
|
||||
{ 5, {{3, 2}, {3, 3}, {1, 3}, {1, 2}, {1, 5}, {2, 4}}},
|
||||
/* CH9101RY */
|
||||
{ 4, {{1, 3}, {3, 3}, {3, 2}, {2, 4}}},
|
||||
/* CH9102F */
|
||||
{ 5, {{2, 1}, {2, 7}, {2, 4}, {2, 6}, {2, 3}}},
|
||||
/* CH9102X */
|
||||
{ 6, {{2, 3}, {2, 5}, {2, 1}, {2, 7}, {3, 0}, {2, 2}}},
|
||||
/* CH9103M */
|
||||
{12, {{1, 3}, {1, 2}, {3, 2}, {2, 6}, {1, 0}, {1, 6}, {2, 3}, {2, 5}, {3, 0}, {2, 2}, {1, 5}, {2, 4}}},
|
||||
/* CH9104L */
|
||||
{24, {}},
|
||||
};
|
||||
|
||||
struct ch343 {
|
||||
struct usb_device *dev; /* the corresponding usb device */
|
||||
struct usb_interface *control; /* control interface */
|
||||
struct usb_interface *data; /* data interface */
|
||||
struct tty_port port; /* our tty port data */
|
||||
struct urb *ctrlurb; /* urbs */
|
||||
u8 *ctrl_buffer; /* buffers of urbs */
|
||||
dma_addr_t ctrl_dma; /* dma handles of buffers */
|
||||
struct ch343_wb wb[CH343_NW];
|
||||
unsigned long read_urbs_free;
|
||||
struct urb *read_urbs[CH343_NR];
|
||||
struct ch343_rb read_buffers[CH343_NR];
|
||||
int rx_buflimit;
|
||||
int rx_endpoint;
|
||||
spinlock_t read_lock;
|
||||
int write_used; /* number of non-empty write buffers */
|
||||
int transmitting;
|
||||
spinlock_t write_lock;
|
||||
struct mutex mutex;
|
||||
bool disconnected;
|
||||
struct usb_ch343_line_coding line; /* bits, stop, parity */
|
||||
struct work_struct work; /* work queue entry for line discipline waking up */
|
||||
unsigned int ctrlin; /* input control lines (DCD, DSR, RI, break, overruns) */
|
||||
unsigned int ctrlout; /* output control lines (DTR, RTS) */
|
||||
struct async_icount iocount; /* counters for control line changes */
|
||||
struct async_icount oldcount; /* for comparison of counter */
|
||||
wait_queue_head_t wioctl; /* for ioctl */
|
||||
unsigned int writesize; /* max packet size for the output bulk endpoint */
|
||||
unsigned int readsize, ctrlsize; /* buffer sizes for freeing */
|
||||
unsigned int minor; /* ch343 minor number */
|
||||
unsigned char clocal; /* termios CLOCAL */
|
||||
unsigned int susp_count; /* number of suspended interfaces */
|
||||
u8 bInterval;
|
||||
struct usb_anchor delayed; /* writes queued for a device about to be woken */
|
||||
unsigned long quirks;
|
||||
u8 iface;
|
||||
CHIPTYPE chiptype;
|
||||
u16 idVendor;
|
||||
u16 idProduct;
|
||||
u8 gpio5dir;
|
||||
};
|
||||
|
||||
#define CDC_DATA_INTERFACE_TYPE 0x0a
|
||||
|
||||
/* constants describing various quirks and errors */
|
||||
#define NO_UNION_NORMAL BIT(0)
|
||||
#define SINGLE_RX_URB BIT(1)
|
||||
#define NO_CAP_LINE BIT(2)
|
||||
#define NO_DATA_INTERFACE BIT(4)
|
||||
#define IGNORE_DEVICE BIT(5)
|
||||
#define QUIRK_CONTROL_LINE_STATE BIT(6)
|
||||
#define CLEAR_HALT_CONDITIONS BIT(7)
|
||||
|
||||
#endif
|
||||
@@ -88,6 +88,9 @@
|
||||
# define DPRINTK(fmt, args...)
|
||||
#endif
|
||||
|
||||
#define CURSOR_ENABLE 0
|
||||
#define SHOW_CENTER 1
|
||||
|
||||
/*
|
||||
* FIXME: Locking
|
||||
*
|
||||
@@ -365,6 +368,7 @@ static int get_color(struct vc_data *vc, struct fb_info *info,
|
||||
|
||||
static void fb_flashcursor(struct work_struct *work)
|
||||
{
|
||||
#if CURSOR_ENABLE
|
||||
struct fb_info *info = container_of(work, struct fb_info, queue);
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
struct vc_data *vc = NULL;
|
||||
@@ -395,6 +399,7 @@ static void fb_flashcursor(struct work_struct *work)
|
||||
ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
|
||||
get_color(vc, info, c, 0));
|
||||
console_unlock();
|
||||
#endif
|
||||
}
|
||||
|
||||
static void cursor_timer_handler(struct timer_list *t)
|
||||
@@ -601,7 +606,12 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
|
||||
if (fb_get_color_depth(&info->var, &info->fix) == 1)
|
||||
erase &= ~0x400;
|
||||
logo_height = fb_prepare_logo(info, ops->rotate);
|
||||
logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
|
||||
|
||||
#if SHOW_CENTER
|
||||
logo_height += (info->var.yres/2) - (logo_height/2);
|
||||
#endif
|
||||
|
||||
logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
|
||||
q = (unsigned short *) (vc->vc_origin +
|
||||
vc->vc_size_row * rows);
|
||||
step = logo_lines * cols;
|
||||
@@ -1331,6 +1341,7 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only)
|
||||
|
||||
static void fbcon_cursor(struct vc_data *vc, int mode)
|
||||
{
|
||||
#if CURSOR_ENABLE
|
||||
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
int c = scr_readw((u16 *) vc->vc_pos);
|
||||
@@ -1352,6 +1363,7 @@ static void fbcon_cursor(struct vc_data *vc, int mode)
|
||||
|
||||
ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
|
||||
get_color(vc, info, c, 0));
|
||||
#endif
|
||||
}
|
||||
|
||||
static int scrollback_phys_max = 0;
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
#include <asm/fb.h>
|
||||
|
||||
|
||||
#define SHOW_CENTER 1
|
||||
/*
|
||||
* Frame buffer device initialization and setup routines
|
||||
*/
|
||||
@@ -520,6 +520,11 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
|
||||
image.dy = y;
|
||||
}
|
||||
|
||||
#if SHOW_CENTER
|
||||
image.dx = (info->var.xres - logo->width) / 2;
|
||||
image.dy = (info->var.yres - logo->height) / 2;
|
||||
#endif
|
||||
|
||||
image.width = logo->width;
|
||||
image.height = logo->height;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,4 +23,6 @@
|
||||
/* reboot system quiescent */
|
||||
#define BOOT_QUIESCENT (REBOOT_FLAG + 14)
|
||||
|
||||
#define BOOT_TO_UBOOT (REBOOT_FLAG + 16)
|
||||
|
||||
#endif
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -18,29 +18,29 @@
|
||||
u-boot,spl-boot-order = &spi_nor, &emmc;
|
||||
};
|
||||
|
||||
adc-keys {
|
||||
compatible = "adc-keys";
|
||||
io-channels = <&saradc 0>;
|
||||
io-channel-names = "buttons";
|
||||
poll-interval = <100>;
|
||||
keyup-threshold-microvolt = <1800000>;
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
adc-keys {
|
||||
compatible = "adc-keys";
|
||||
io-channels = <&saradc 0>;
|
||||
io-channel-names = "buttons";
|
||||
poll-interval = <100>;
|
||||
keyup-threshold-microvolt = <1800000>;
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
|
||||
volumeup-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
label = "volume up";
|
||||
press-threshold-microvolt = <0>;
|
||||
};
|
||||
volumeup-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
label = "volume up";
|
||||
press-threshold-microvolt = <0>;
|
||||
};
|
||||
|
||||
volumedown-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
label = "volume down";
|
||||
press-threshold-microvolt = <400781>;
|
||||
};
|
||||
};
|
||||
volumedown-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
label = "volume down";
|
||||
press-threshold-microvolt = <400781>;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -18,29 +18,29 @@
|
||||
u-boot,spl-boot-order = &spi_nand, &emmc;
|
||||
};
|
||||
|
||||
adc-keys {
|
||||
compatible = "adc-keys";
|
||||
io-channels = <&saradc 0>;
|
||||
io-channel-names = "buttons";
|
||||
poll-interval = <100>;
|
||||
keyup-threshold-microvolt = <1800000>;
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
adc-keys {
|
||||
compatible = "adc-keys";
|
||||
io-channels = <&saradc 0>;
|
||||
io-channel-names = "buttons";
|
||||
poll-interval = <100>;
|
||||
keyup-threshold-microvolt = <1800000>;
|
||||
u-boot,dm-spl;
|
||||
status = "okay";
|
||||
|
||||
volumeup-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
label = "volume up";
|
||||
press-threshold-microvolt = <0>;
|
||||
};
|
||||
volumeup-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEUP>;
|
||||
label = "volume up";
|
||||
press-threshold-microvolt = <0>;
|
||||
};
|
||||
|
||||
volumedown-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
label = "volume down";
|
||||
press-threshold-microvolt = <400781>;
|
||||
};
|
||||
};
|
||||
volumedown-key {
|
||||
u-boot,dm-spl;
|
||||
linux,code = <KEY_VOLUMEDOWN>;
|
||||
label = "volume down";
|
||||
press-threshold-microvolt = <400781>;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
/* enter bootrom download mode */
|
||||
#define BOOT_BROM_DOWNLOAD 0xEF08A53C
|
||||
|
||||
#define BOOT_TO_UBOOT (REBOOT_FLAG + 16)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
int setup_boot_mode(void);
|
||||
#endif
|
||||
|
||||
@@ -206,6 +206,11 @@ int rockchip_get_boot_mode(void)
|
||||
printf("boot mode: quiescent\n");
|
||||
boot_mode[PL] = BOOT_MODE_QUIESCENT;
|
||||
break;
|
||||
case BOOT_TO_UBOOT:
|
||||
printf("boot mode: uboot\n");
|
||||
boot_mode[PL] = BOOT_MODE_UBOOT_TERMINAL;
|
||||
clear_boot_reg = 1;
|
||||
break;
|
||||
default:
|
||||
printf("boot mode: None\n");
|
||||
boot_mode[PL] = BOOT_MODE_UNDEFINE;
|
||||
@@ -231,6 +236,8 @@ int setup_boot_mode(void)
|
||||
{
|
||||
char env_preboot[256] = {0};
|
||||
|
||||
env_set("cli", NULL); /* removed by default */
|
||||
|
||||
switch (rockchip_get_boot_mode()) {
|
||||
case BOOT_MODE_BOOTLOADER:
|
||||
printf("enter fastboot!\n");
|
||||
@@ -263,6 +270,10 @@ int setup_boot_mode(void)
|
||||
printf("enter charging!\n");
|
||||
env_set("preboot", "setenv preboot; charge");
|
||||
break;
|
||||
case BOOT_MODE_UBOOT_TERMINAL:
|
||||
printf("enter uboot!\n");
|
||||
env_set("cli", "yes");
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -220,7 +220,8 @@ static int __abortboot(int bootdelay)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_ROCKCHIP
|
||||
if (!IS_ENABLED(CONFIG_CONSOLE_DISABLE_CLI) && ctrlc()) { /* we press ctrl+c ? */
|
||||
// if (!IS_ENABLED(CONFIG_CONSOLE_DISABLE_CLI) && ctrlc()) { /* we press ctrl+c ? */
|
||||
if ((!IS_ENABLED(CONFIG_CONSOLE_DISABLE_CLI) && ctrlc()) || env_get("cli")) { /* we press ctrl+c ? */
|
||||
#else
|
||||
/*
|
||||
* Check if key already pressed
|
||||
|
||||
@@ -32,6 +32,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
#include <u-boot/sha1.h>
|
||||
#include <u-boot/sha256.h>
|
||||
|
||||
#define FDT_DEFAULT_LOAD_ADDR 0x00c00000
|
||||
#define __round_mask(x, y) ((__typeof__(x))((y)-1))
|
||||
#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
|
||||
|
||||
@@ -2140,7 +2141,13 @@ int fit_image_load_index(bootm_headers_t *images, ulong addr,
|
||||
ret = fit_image_select(fit, noffset, images->verify);
|
||||
if (ret) {
|
||||
bootstage_error(bootstage_id + BOOTSTAGE_SUB_HASH);
|
||||
return ret;
|
||||
/* Use the memory fdt directly */
|
||||
printf(" Use the memory fdt directly\n");
|
||||
*datap = FDT_DEFAULT_LOAD_ADDR;
|
||||
fit_image_get_data_size(fit, noffset, (int *)&size);
|
||||
*lenp = (ulong)size;
|
||||
return noffset;
|
||||
//return ret;
|
||||
}
|
||||
|
||||
bootstage_mark(bootstage_id + BOOTSTAGE_SUB_CHECK_ARCH);
|
||||
@@ -2175,7 +2182,6 @@ int fit_image_load_index(bootm_headers_t *images, ulong addr,
|
||||
fit_image_check_os(fit, noffset, IH_OS_ARM_TRUSTED_FIRMWARE) ||
|
||||
fit_image_check_os(fit, noffset, IH_OS_OP_TEE) ||
|
||||
fit_image_check_os(fit, noffset, IH_OS_U_BOOT) ||
|
||||
fit_image_check_os(fit, noffset, IH_OS_QNX) ||
|
||||
fit_image_check_os(fit, noffset, IH_OS_OPENRTOS);
|
||||
|
||||
/*
|
||||
@@ -2261,8 +2267,10 @@ int fit_image_load_index(bootm_headers_t *images, ulong addr,
|
||||
return -EXDEV;
|
||||
}
|
||||
|
||||
//printf(" Loading %s from 0x%08lx to 0x%08lx\n",
|
||||
// prop_name, data, load);
|
||||
printf(" Loading %s from 0x%08lx to 0x%08lx\n",
|
||||
prop_name, data, load);
|
||||
prop_name, image_start, load);
|
||||
|
||||
dst = map_sysmem(load, len);
|
||||
memmove(dst, buf, len);
|
||||
|
||||
@@ -2288,6 +2288,11 @@ int mmc_start_init(struct mmc *mmc)
|
||||
|
||||
/* Test for SD version 2 */
|
||||
err = mmc_send_if_cond(mmc);
|
||||
if (err) {
|
||||
mmc_go_idle(mmc);
|
||||
mmc_get_blk_desc(mmc)->hwpart = 0;
|
||||
mmc_send_if_cond(mmc);
|
||||
}
|
||||
|
||||
/* Now try to get the SD card's operating condition */
|
||||
err = sd_send_op_cond(mmc);
|
||||
|
||||
@@ -20,6 +20,7 @@ enum _boot_mode {
|
||||
BOOT_MODE_WATCHDOG,
|
||||
BOOT_MODE_DFU,
|
||||
BOOT_MODE_QUIESCENT,
|
||||
BOOT_MODE_UBOOT_TERMINAL,
|
||||
BOOT_MODE_UNDEFINE,
|
||||
};
|
||||
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# sshd Starts sshd.
|
||||
#
|
||||
|
||||
# Make sure the ssh-keygen progam exists
|
||||
[ -f /usr/bin/ssh-keygen ] || exit 0
|
||||
|
||||
umask 077
|
||||
|
||||
start() {
|
||||
chown root:root /var/empty/
|
||||
# Create any missing keys
|
||||
/usr/bin/ssh-keygen -A
|
||||
|
||||
printf "Starting sshd: "
|
||||
/usr/sbin/sshd
|
||||
touch /var/lock/sshd
|
||||
echo "OK"
|
||||
}
|
||||
stop() {
|
||||
printf "Stopping sshd: "
|
||||
killall sshd
|
||||
rm -f /var/lock/sshd
|
||||
echo "OK"
|
||||
}
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
restart|reload)
|
||||
restart
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit $?
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
check_hciconfig() {
|
||||
if command -v hciattach &> /dev/null; then
|
||||
if lsmod | grep -q "aic8800_fdrv"; then
|
||||
hciattach -s 1500000 /dev/ttyS1 any 1500000 flow nosleep&
|
||||
sleep 2
|
||||
if hciconfig -a | grep -q "hci0"; then
|
||||
hciconfig hci0 up&
|
||||
else
|
||||
echo "hci0 not found or not available."
|
||||
fi
|
||||
else
|
||||
echo "aic8800_fdrv not found."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
check_hciconfig
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# python Starts python code.
|
||||
#
|
||||
|
||||
# Make sure the python progam exists
|
||||
[ -f /usr/bin/python ] || exit 0
|
||||
|
||||
umask 077
|
||||
|
||||
main_path="/root/main.py"
|
||||
boot_path="/root/boot.py"
|
||||
|
||||
start() {
|
||||
# Run python progam
|
||||
if [ -f $main_path ]; then
|
||||
echo "running $main_path..."
|
||||
python $main_path
|
||||
else
|
||||
if [ -f $boot_path ]; then
|
||||
echo "running $boot_path..."
|
||||
python $boot_path
|
||||
else
|
||||
echo "$main_path and $boot_path not exist ,pass..."
|
||||
fi
|
||||
fi
|
||||
echo "OK"
|
||||
}
|
||||
stop() {
|
||||
printf "Stopping python: "
|
||||
killall python
|
||||
echo "OK"
|
||||
}
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
restart|reload)
|
||||
restart
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
exit $?
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
if [ "$(hwclock | grep "1969")" ]; then
|
||||
echo "RTC time calibration"
|
||||
date -s 2024-01-01
|
||||
hwclock -w
|
||||
else
|
||||
echo "RTC does not require time calibration"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Binary file not shown.
@@ -66,6 +66,7 @@ BR2_PACKAGE_LIBV4L=y
|
||||
BR2_PACKAGE_LIBV4L_UTILS=y
|
||||
BR2_PACKAGE_CJSON=y
|
||||
BR2_PACKAGE_CJSON_UTILS=y
|
||||
BR2_PACKAGE_PCRE2=y
|
||||
BR2_PACKAGE_BLUEZ_TOOLS=y
|
||||
BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y
|
||||
BR2_PACKAGE_BLUEZ5_UTILS_TOOLS=y
|
||||
@@ -77,6 +78,9 @@ BR2_PACKAGE_IW=y
|
||||
BR2_PACKAGE_LRZSZ=y
|
||||
BR2_PACKAGE_NTP=y
|
||||
BR2_PACKAGE_OPENSSH=y
|
||||
BR2_PACKAGE_PPPD=y
|
||||
BR2_PACKAGE_PPPD_FILTER=y
|
||||
BR2_PACKAGE_PPPD_RADIUS=y
|
||||
BR2_PACKAGE_SAMBA4=y
|
||||
BR2_PACKAGE_SOCAT=y
|
||||
BR2_PACKAGE_BASH=y
|
||||
@@ -84,6 +88,7 @@ BR2_PACKAGE_BASH_LOADABLE_EXAMPLES=y
|
||||
BR2_PACKAGE_DIALOG=y
|
||||
BR2_PACKAGE_TIME=y
|
||||
BR2_PACKAGE_HTOP=y
|
||||
BR2_PACKAGE_PROCPS_NG=y
|
||||
BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y
|
||||
BR2_PACKAGE_NANO=y
|
||||
BR2_PACKAGE_HOST_DTC=y
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
|
||||
|
||||
export EDITOR='/bin/vi'
|
||||
|
||||
#export PS1='[\u@\h \W]# '
|
||||
if [ "$PS1" ]; then
|
||||
if [ "`id -u`" -eq 0 ]; then
|
||||
#export PS1='# '
|
||||
export PS1='[\u@\h \W]# '
|
||||
else
|
||||
#export PS1='$ '
|
||||
export PS1='[\u@\h \W]$ '
|
||||
fi
|
||||
fi
|
||||
|
||||
# Source configuration files from /etc/profile.d
|
||||
for i in /etc/profile.d/*.sh ; do
|
||||
if [ -r "$i" ]; then
|
||||
. $i
|
||||
fi
|
||||
done
|
||||
unset i
|
||||
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
[global]
|
||||
workgroup = WORKGROUP
|
||||
server string = luckfox samba server
|
||||
security = user
|
||||
passdb backend = smbpasswd
|
||||
smb passwd file = /etc/samba/smbpasswd
|
||||
[public]
|
||||
comment = public share
|
||||
path = /
|
||||
read only = no
|
||||
user = root
|
||||
create mask = 0755
|
||||
directory mask = 0755
|
||||
@@ -1,9 +0,0 @@
|
||||
root:$1$dXmV8ZLO$eNAQzSYOgRkYMJRdsHwLS1:19664::::::
|
||||
daemon:*:::::::
|
||||
bin:*:::::::
|
||||
sys:*:::::::
|
||||
sync:*:::::::
|
||||
mail:*:::::::
|
||||
www-data:*:::::::
|
||||
operator:*:::::::
|
||||
nobody:*:::::::
|
||||
@@ -1 +0,0 @@
|
||||
root:0:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:EF8BDD6C516032CDB7C15080FFE1B2D5:[U ]:LCT-5FEF3549:
|
||||
@@ -1,116 +0,0 @@
|
||||
# $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
|
||||
|
||||
# This is the sshd server system-wide configuration file. See
|
||||
# sshd_config(5) for more information.
|
||||
|
||||
# This sshd was compiled with PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
||||
|
||||
# The strategy used for options in the default sshd_config shipped with
|
||||
# OpenSSH is to specify options with their default value where
|
||||
# possible, but leave them commented. Uncommented options override the
|
||||
# default value.
|
||||
|
||||
#Port 22
|
||||
#AddressFamily any
|
||||
#ListenAddress 0.0.0.0
|
||||
#ListenAddress ::
|
||||
|
||||
#HostKey /etc/ssh/ssh_host_rsa_key
|
||||
#HostKey /etc/ssh/ssh_host_ecdsa_key
|
||||
#HostKey /etc/ssh/ssh_host_ed25519_key
|
||||
|
||||
# Ciphers and keying
|
||||
#RekeyLimit default none
|
||||
|
||||
# Logging
|
||||
#SyslogFacility AUTH
|
||||
#LogLevel INFO
|
||||
|
||||
# Authentication:
|
||||
|
||||
#LoginGraceTime 2m
|
||||
PermitRootLogin yes
|
||||
#StrictModes yes
|
||||
#MaxAuthTries 6
|
||||
#MaxSessions 10
|
||||
|
||||
#PubkeyAuthentication yes
|
||||
|
||||
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
|
||||
# but this is overridden so installations will only check .ssh/authorized_keys
|
||||
AuthorizedKeysFile .ssh/authorized_keys
|
||||
|
||||
#AuthorizedPrincipalsFile none
|
||||
|
||||
#AuthorizedKeysCommand none
|
||||
#AuthorizedKeysCommandUser nobody
|
||||
|
||||
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
|
||||
#HostbasedAuthentication no
|
||||
# Change to yes if you don't trust ~/.ssh/known_hosts for
|
||||
# HostbasedAuthentication
|
||||
#IgnoreUserKnownHosts no
|
||||
# Don't read the user's ~/.rhosts and ~/.shosts files
|
||||
#IgnoreRhosts yes
|
||||
|
||||
# To disable tunneled clear text passwords, change to no here!
|
||||
#PasswordAuthentication yes
|
||||
#PermitEmptyPasswords no
|
||||
|
||||
# Change to no to disable s/key passwords
|
||||
#KbdInteractiveAuthentication yes
|
||||
|
||||
# Kerberos options
|
||||
#KerberosAuthentication no
|
||||
#KerberosOrLocalPasswd yes
|
||||
#KerberosTicketCleanup yes
|
||||
#KerberosGetAFSToken no
|
||||
|
||||
# GSSAPI options
|
||||
#GSSAPIAuthentication no
|
||||
#GSSAPICleanupCredentials yes
|
||||
|
||||
# Set this to 'yes' to enable PAM authentication, account processing,
|
||||
# and session processing. If this is enabled, PAM authentication will
|
||||
# be allowed through the KbdInteractiveAuthentication and
|
||||
# PasswordAuthentication. Depending on your PAM configuration,
|
||||
# PAM authentication via KbdInteractiveAuthentication may bypass
|
||||
# the setting of "PermitRootLogin prohibit-password".
|
||||
# If you just want the PAM account and session checks to run without
|
||||
# PAM authentication, then enable this but set PasswordAuthentication
|
||||
# and KbdInteractiveAuthentication to 'no'.
|
||||
#UsePAM no
|
||||
|
||||
#AllowAgentForwarding yes
|
||||
#AllowTcpForwarding yes
|
||||
#GatewayPorts no
|
||||
#X11Forwarding no
|
||||
#X11DisplayOffset 10
|
||||
#X11UseLocalhost yes
|
||||
#PermitTTY yes
|
||||
#PrintMotd yes
|
||||
#PrintLastLog yes
|
||||
#TCPKeepAlive yes
|
||||
#PermitUserEnvironment no
|
||||
#Compression delayed
|
||||
#ClientAliveInterval 0
|
||||
#ClientAliveCountMax 3
|
||||
#UseDNS no
|
||||
#PidFile /var/run/sshd.pid
|
||||
#MaxStartups 10:30:100
|
||||
#PermitTunnel no
|
||||
#ChrootDirectory none
|
||||
#VersionAddendum none
|
||||
|
||||
# no default banner path
|
||||
#Banner none
|
||||
|
||||
# override default of no subsystems
|
||||
Subsystem sftp /usr/libexec/sftp-server
|
||||
|
||||
# Example of overriding settings on a per-user basis
|
||||
#Match User anoncvs
|
||||
# X11Forwarding no
|
||||
# AllowTcpForwarding no
|
||||
# PermitTTY no
|
||||
# ForceCommand cvs server
|
||||
2
sysdrv/tools/board/custom/.gitignore
vendored
2
sysdrv/tools/board/custom/.gitignore
vendored
@@ -1,2 +0,0 @@
|
||||
./custom.tar.gz
|
||||
./*.tar.gz
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -1,99 +0,0 @@
|
||||
From 94a0b2232c729c757547b88f2cbc035cef7e0bc1 Mon Sep 17 00:00:00 2001
|
||||
From: luckfox-eng29 <eng29@luckfox.com>
|
||||
Date: Tue, 8 Oct 2024 21:50:54 +0800
|
||||
Subject: [PATCH] patch:logo_center
|
||||
|
||||
Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
|
||||
---
|
||||
.../source/kernel/drivers/video/fbdev/core/fbcon.c | 14 +++++++++++++-
|
||||
.../source/kernel/drivers/video/fbdev/core/fbmem.c | 7 ++++++-
|
||||
2 files changed, 19 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sysdrv/source/kernel/drivers/video/fbdev/core/fbcon.c b/sysdrv/source/kernel/drivers/video/fbdev/core/fbcon.c
|
||||
index 27828435d..c3ac676bb 100644
|
||||
--- a/sysdrv/source/kernel/drivers/video/fbdev/core/fbcon.c
|
||||
+++ b/sysdrv/source/kernel/drivers/video/fbdev/core/fbcon.c
|
||||
@@ -88,6 +88,9 @@
|
||||
# define DPRINTK(fmt, args...)
|
||||
#endif
|
||||
|
||||
+#define CURSOR_ENABLE 0
|
||||
+#define SHOW_CENTER 1
|
||||
+
|
||||
/*
|
||||
* FIXME: Locking
|
||||
*
|
||||
@@ -365,6 +368,7 @@ static int get_color(struct vc_data *vc, struct fb_info *info,
|
||||
|
||||
static void fb_flashcursor(struct work_struct *work)
|
||||
{
|
||||
+#if CURSOR_ENABLE
|
||||
struct fb_info *info = container_of(work, struct fb_info, queue);
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
struct vc_data *vc = NULL;
|
||||
@@ -395,6 +399,7 @@ static void fb_flashcursor(struct work_struct *work)
|
||||
ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
|
||||
get_color(vc, info, c, 0));
|
||||
console_unlock();
|
||||
+#endif
|
||||
}
|
||||
|
||||
static void cursor_timer_handler(struct timer_list *t)
|
||||
@@ -601,7 +606,12 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
|
||||
if (fb_get_color_depth(&info->var, &info->fix) == 1)
|
||||
erase &= ~0x400;
|
||||
logo_height = fb_prepare_logo(info, ops->rotate);
|
||||
- logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
|
||||
+
|
||||
+#if SHOW_CENTER
|
||||
+ logo_height += (info->var.yres/2) - (logo_height/2);
|
||||
+#endif
|
||||
+
|
||||
+ logo_lines = DIV_ROUND_UP(logo_height, vc->vc_font.height);
|
||||
q = (unsigned short *) (vc->vc_origin +
|
||||
vc->vc_size_row * rows);
|
||||
step = logo_lines * cols;
|
||||
@@ -1331,6 +1341,7 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only)
|
||||
|
||||
static void fbcon_cursor(struct vc_data *vc, int mode)
|
||||
{
|
||||
+#if CURSOR_ENABLE
|
||||
struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
|
||||
struct fbcon_ops *ops = info->fbcon_par;
|
||||
int c = scr_readw((u16 *) vc->vc_pos);
|
||||
@@ -1352,6 +1363,7 @@ static void fbcon_cursor(struct vc_data *vc, int mode)
|
||||
|
||||
ops->cursor(vc, info, mode, get_color(vc, info, c, 1),
|
||||
get_color(vc, info, c, 0));
|
||||
+#endif
|
||||
}
|
||||
|
||||
static int scrollback_phys_max = 0;
|
||||
diff --git a/sysdrv/source/kernel/drivers/video/fbdev/core/fbmem.c b/sysdrv/source/kernel/drivers/video/fbdev/core/fbmem.c
|
||||
index d787a344b..690d48fba 100644
|
||||
--- a/sysdrv/source/kernel/drivers/video/fbdev/core/fbmem.c
|
||||
+++ b/sysdrv/source/kernel/drivers/video/fbdev/core/fbmem.c
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
#include <asm/fb.h>
|
||||
|
||||
-
|
||||
+#define SHOW_CENTER 1
|
||||
/*
|
||||
* Frame buffer device initialization and setup routines
|
||||
*/
|
||||
@@ -520,6 +520,11 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
|
||||
image.dy = y;
|
||||
}
|
||||
|
||||
+#if SHOW_CENTER
|
||||
+image.dx = (info->var.xres - logo->width) / 2;
|
||||
+image.dy = (info->var.yres - logo->height) / 2;
|
||||
+#endif
|
||||
+
|
||||
image.width = logo->width;
|
||||
image.height = logo->height;
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
load_luckfoxconfig() {
|
||||
if [ -f /usr/bin/luckfox-config ]; then
|
||||
luckfox-config load
|
||||
fi
|
||||
if [ "$(cat /proc/device-tree/model)" == "Luckfox Pico Ultra" ] ||
|
||||
[ "$(cat /proc/device-tree/model)" == "Luckfox Pico Ultra W" ]; then
|
||||
luckfox_switch_rgb_resolution &
|
||||
fi
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
load_luckfoxconfig
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
@@ -1,206 +0,0 @@
|
||||
#!/bin/bash
|
||||
LUCKFOX_FDT_DTB=/tmp/.fdt.dtb
|
||||
LUCKFOX_FDT_HDR_DTB=/tmp/.fdt_header.dtb
|
||||
LUCKFOX_FDT_HDR_OVERLAY_DTS=/tmp/.fdt_header_overlay.dts
|
||||
LUCKFOX_FDT_HDR_OVERLAY_DTBO=/tmp/.fdt_header_overlay.dtbo
|
||||
|
||||
LUCKFOX_FDT_DUMP_TXT=/tmp/.fdt_dump.txt
|
||||
LF_CUSTOM_DTS_PATH="/mnt/cfg"
|
||||
SYS_OVERLAYS_PATH="/sys/kernel/config/device-tree/overlays"
|
||||
LUCKFOX_CHIP_MEDIA_CLASS="emmc"
|
||||
LUCKFOX_CHIP_MEDIA="/dev/mmcblk0p4"
|
||||
|
||||
function luckfox_tools_check() {
|
||||
if ! command -v dialog &>/dev/null; then
|
||||
echo "The dialog is not installed "
|
||||
exit
|
||||
fi
|
||||
|
||||
if ! command -v dtc &>/dev/null; then
|
||||
echo "The dtc is not installed"
|
||||
exit
|
||||
fi
|
||||
|
||||
# get media class dev
|
||||
if [[ -e /dev/mmcblk0p4 ]]; then
|
||||
LUCKFOX_CHIP_MEDIA_CLASS="emmc"
|
||||
LUCKFOX_CHIP_MEDIA=/dev/mmcblk0p4
|
||||
elif [[ -e /dev/mmcblk1p4 ]]; then
|
||||
LUCKFOX_CHIP_MEDIA_CLASS="sdmmc"
|
||||
LUCKFOX_CHIP_MEDIA=/dev/mmcblk1p4
|
||||
luckfox_set_pin_parameter "SDMMC" 1
|
||||
elif [[ -e /dev/mtdblock3 ]]; then
|
||||
LUCKFOX_CHIP_MEDIA_CLASS="spi_nand"
|
||||
LUCKFOX_CHIP_MEDIA=/dev/mtdblock3
|
||||
else
|
||||
LUCKFOX_CHIP_MEDIA_CLASS="unknown"
|
||||
echo "Do not know the storage medium of Luckfox!"
|
||||
exit
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
# -- Static Overlay --
|
||||
function luckfox_sha256_convert() {
|
||||
local sha256_hash=$1
|
||||
local formatted_hash=""
|
||||
|
||||
for ((i = 0; i < ${#sha256_hash}; i += 8)); do
|
||||
formatted_hash+="0x${sha256_hash:$i:8} "
|
||||
done
|
||||
|
||||
echo "$formatted_hash"
|
||||
}
|
||||
|
||||
function luckfox_update_fdt() {
|
||||
# get fdt_header
|
||||
local origin_fdt_size_hex origin_fdt_size
|
||||
dd if=$LUCKFOX_CHIP_MEDIA of=$LUCKFOX_FDT_HDR_DTB bs=1 skip=0 count=2048 >/dev/null 2>&1
|
||||
|
||||
# get size
|
||||
if [ ! -f $LUCKFOX_FDT_HDR_DTB ]; then
|
||||
echo "$LUCKFOX_FDT_HDR_DTB can't be found!"
|
||||
return
|
||||
fi
|
||||
origin_fdt_size_hex=$(fdtdump $LUCKFOX_FDT_HDR_DTB | grep -A 5 "fdt {" | grep "data-size" | awk '{print $3}' | tr -d ';<>')
|
||||
origin_fdt_size=$(printf "%d\n" "$origin_fdt_size_hex")
|
||||
|
||||
# get fdt dtb
|
||||
dd if=$LUCKFOX_CHIP_MEDIA of=$LUCKFOX_FDT_DTB bs=1 skip=2048 count="$origin_fdt_size" >/dev/null 2>&1
|
||||
|
||||
# create fdt dump
|
||||
if [ ! -f $LUCKFOX_FDT_DTB ]; then
|
||||
echo "$LUCKFOX_FDT_DTB can't be found!"
|
||||
return
|
||||
fi
|
||||
fdtdump $LUCKFOX_FDT_DTB >$LUCKFOX_FDT_DUMP_TXT
|
||||
}
|
||||
|
||||
function luckfox_fdt_overlay() {
|
||||
#region
|
||||
local fdt_overlay_dtbo="$1"
|
||||
local fdt_dtb_size fdt_size fdt_size_hex fdt_hash_data
|
||||
|
||||
fdtoverlay -i $LUCKFOX_FDT_DTB -o $LUCKFOX_FDT_DTB "$fdt_overlay_dtbo" >/dev/null 2>&1
|
||||
fdt_dtb_size=$(ls -la $LUCKFOX_FDT_DTB | awk '{print $5}')
|
||||
|
||||
kernel_offset=$(fdtdump $LUCKFOX_FDT_HDR_DTB | grep -A 2 "kernel {" | grep "data-position" | sed -n 's/.*<\(0x[0-9a-fA-F]*\)>.*/\1/p')
|
||||
fdt_offset=$(fdtdump $LUCKFOX_FDT_HDR_DTB | grep -A 2 "fdt {" | grep "data-position" | sed -n 's/.*<\(0x[0-9a-fA-F]*\)>.*/\1/p')
|
||||
|
||||
kernel_offset_dec=$((kernel_offset))
|
||||
fdt_offset_dec=$((fdt_offset))
|
||||
result_dec=$((kernel_offset_dec - fdt_offset_dec))
|
||||
|
||||
if [ $result_dec -lt "$fdt_dtb_size" ]; then
|
||||
echo "Kernel will be affected !"
|
||||
fi
|
||||
|
||||
dd if=$LUCKFOX_FDT_DTB of=$LUCKFOX_CHIP_MEDIA bs=1 seek=2048 count="$fdt_dtb_size" >/dev/null 2>&1
|
||||
|
||||
# fdt header
|
||||
if [ ! -f $LUCKFOX_FDT_DTB ]; then
|
||||
echo "$LUCKFOX_FDT_DTB can't be found!"
|
||||
return
|
||||
fi
|
||||
fdt_size=$(ls -la $LUCKFOX_FDT_DTB | awk '{print $5}')
|
||||
fdt_size_hex=$(printf "%x\n" "$fdt_size")
|
||||
fdt_hash_data=$(luckfox_sha256_convert "$(sha256sum $LUCKFOX_FDT_DTB | awk '{print $1}')")
|
||||
fdt_header_content="
|
||||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
&{/images/fdt}{
|
||||
data-size=<0x$fdt_size_hex>;
|
||||
hash{
|
||||
value=<$fdt_hash_data>;
|
||||
};
|
||||
};
|
||||
"
|
||||
echo "$fdt_header_content" >$LUCKFOX_FDT_HDR_OVERLAY_DTS
|
||||
dtc -I dts -O dtb $LUCKFOX_FDT_HDR_OVERLAY_DTS -o $LUCKFOX_FDT_HDR_OVERLAY_DTBO
|
||||
if [ ! -f $LUCKFOX_FDT_HDR_OVERLAY_DTBO ]; then
|
||||
echo "$LUCKFOX_FDT_HDR_OVERLAY_DTBO can't found!"
|
||||
return
|
||||
fi
|
||||
fdtoverlay -i $LUCKFOX_FDT_HDR_DTB -o $LUCKFOX_FDT_HDR_DTB $LUCKFOX_FDT_HDR_OVERLAY_DTBO >/dev/null 2>&1
|
||||
dd if=$LUCKFOX_FDT_HDR_DTB of=$LUCKFOX_CHIP_MEDIA bs=1 seek=0 count=2048 >/dev/null 2>&1
|
||||
#endregion
|
||||
}
|
||||
|
||||
# Load the device tree dynamically
|
||||
function luckfox_load_dynamic_dts() {
|
||||
local dtbo_node_name
|
||||
|
||||
if [ ! -d ${LF_CUSTOM_DTS_PATH}/dtbo/ ]; then
|
||||
exit 1
|
||||
#echo "Can't find ${LF_CUSTOM_DTS_PATH}/dtbo dir !"
|
||||
fi
|
||||
|
||||
for dts_file in ${LF_CUSTOM_DTS_PATH}/dtbo/*.dts; do
|
||||
#Get DTBO name
|
||||
dtbo_node_name="$(basename "$dts_file" .dts)"
|
||||
#Check DTBO path
|
||||
if [ -d "${SYS_OVERLAYS_PATH}/${dtbo_node_name}" ]; then
|
||||
echo "Node is exist"
|
||||
continue
|
||||
fi
|
||||
|
||||
#DTS->DTBO
|
||||
dtc -I dts -O dtb ${LF_CUSTOM_DTS_PATH}/dtbo/${dtbo_node_name}.dts -o \
|
||||
${LF_CUSTOM_DTS_PATH}/dtbo/${dtbo_node_name}.dtbo
|
||||
|
||||
if [ ! -f "${LF_CUSTOM_DTS_PATH}/dtbo/${dtbo_node_name}.dtbo" ]; then
|
||||
echo "${dtbo_node_name}.dts to dtbo error!"
|
||||
continue
|
||||
else
|
||||
mkdir -p ${SYS_OVERLAYS_PATH}/${dtbo_node_name}
|
||||
fi
|
||||
#Load and enable DTBO
|
||||
cat ${LF_CUSTOM_DTS_PATH}/dtbo/${dtbo_node_name}.dtbo > \
|
||||
${SYS_OVERLAYS_PATH}/${dtbo_node_name}/dtbo
|
||||
echo 1 >${SYS_OVERLAYS_PATH}/${dtbo_node_name}/status
|
||||
|
||||
rm ${LLF_CUSTOM_DTS_PATH}/dtbo/${dtbo_node_name}.dtbo
|
||||
done
|
||||
}
|
||||
|
||||
#Overwrite the disk device tree (requires restart)
|
||||
function luckfox_load_static_dts() {
|
||||
local dtbo_node_name
|
||||
if [ ! -d ${LF_CUSTOM_DTS_PATH}/fdt_overlay/ ]; then
|
||||
echo "Can't find ${LF_CUSTOM_DTS_PATH}/fdt_overlay dir!"
|
||||
fi
|
||||
|
||||
for dts_file in ${LF_CUSTOM_DTS_PATH}/fdt_overlay/*.dts; do
|
||||
#Get DTBO name
|
||||
dtbo_node_name="$(basename "$dts_file" .dts)"
|
||||
|
||||
#DTS->DTBO
|
||||
dtc -I dts -O dtb ${LF_CUSTOM_DTS_PATH}/fdt_overlay/${dtbo_node_name}.dts -o \
|
||||
${LF_CUSTOM_DTS_PATH}/fdt_overlay/${dtbo_node_name}.dtbo
|
||||
|
||||
if [ ! -f "${LF_CUSTOM_DTS_PATH}/fdt_overlay/${dtbo_node_name}.dtbo" ]; then
|
||||
echo "${dtbo_node_name}.dts to dtbo error!"
|
||||
continue
|
||||
fi
|
||||
|
||||
# load to disk
|
||||
luckfox_update_fdt
|
||||
luckfox_fdt_overlay ${LF_CUSTOM_DTS_PATH}/fdt_overlay/${dtbo_node_name}.dtbo
|
||||
rm ${LUCKFOX_FDT_OVERLAY_DTBO}
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
luckfox_load_dynamic_dts
|
||||
;;
|
||||
stop)
|
||||
luckfox_tools_check
|
||||
luckfox_load_static_dts
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,69 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <linux/input.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#define INPUT_DIR "/dev/input"
|
||||
#define EVENT_PREFIX "event"
|
||||
|
||||
void check_adc_keys_event(const char *device_path) {
|
||||
int fd;
|
||||
char name[256] = "Unknown";
|
||||
struct input_event ev;
|
||||
|
||||
fd = open(device_path, O_RDONLY);
|
||||
if (fd < 0) {
|
||||
perror("Unable to open device");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0) {
|
||||
perror("Unable to get device name");
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
|
||||
if (strstr(name, "adc-keys") != NULL) {
|
||||
printf("Found ADC keys device: %s\n", device_path);
|
||||
|
||||
while (read(fd, &ev, sizeof(struct input_event)) > 0) {
|
||||
if (ev.type == EV_KEY) {
|
||||
if (ev.value == 0) {
|
||||
printf("Key released: code %d\n", ev.code);
|
||||
system("luckfox-config rgb_switch");
|
||||
system("reboot");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close(fd);
|
||||
}
|
||||
|
||||
int main() {
|
||||
struct dirent *entry;
|
||||
DIR *dp;
|
||||
|
||||
|
||||
dp = opendir(INPUT_DIR);
|
||||
if (dp == NULL) {
|
||||
perror("Unable to open /dev/input directory");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
while ((entry = readdir(dp))) {
|
||||
if (strncmp(entry->d_name, EVENT_PREFIX, strlen(EVENT_PREFIX)) == 0) {
|
||||
char device_path[256];
|
||||
snprintf(device_path, sizeof(device_path), "%s/%s", INPUT_DIR, entry->d_name);
|
||||
check_adc_keys_event(device_path);
|
||||
}
|
||||
}
|
||||
|
||||
closedir(dp);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
/usr/bin/filesystem_resize.sh
|
||||
/etc/init.d/S50usbdevice start
|
||||
luckfox-config load
|
||||
if [ -n "$(hwclock | grep "invalid")" ]; then
|
||||
date -s 2024-01-01
|
||||
hwclock -w
|
||||
fi
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
libfdt.so.1.7.0
|
||||
Binary file not shown.
@@ -1,172 +0,0 @@
|
||||
From 816477167f7fec38674690a576a9f17100707441 Mon Sep 17 00:00:00 2001
|
||||
From: luckfox-eng29 <eng29@luckfox.com>
|
||||
Date: Wed, 21 Aug 2024 14:35:48 +0800
|
||||
Subject: [PATCH] uboot compatible luckfox
|
||||
|
||||
---
|
||||
.../arm/include/asm/arch-rockchip/boot_mode.h | 2 ++
|
||||
.../u-boot/arch/arm/mach-rockchip/boot_mode.c | 19 +++++++++++++++----
|
||||
sysdrv/source/uboot/u-boot/common/autoboot.c | 3 ++-
|
||||
sysdrv/source/uboot/u-boot/common/image-fit.c | 14 +++++++++++---
|
||||
sysdrv/source/uboot/u-boot/drivers/mmc/mmc.c | 5 +++++
|
||||
.../source/uboot/u-boot/include/boot_rkimg.h | 3 ++-
|
||||
6 files changed, 37 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/sysdrv/source/uboot/u-boot/arch/arm/include/asm/arch-rockchip/boot_mode.h b/sysdrv/source/uboot/u-boot/arch/arm/include/asm/arch-rockchip/boot_mode.h
|
||||
index 063fd6b47..a34ec828f 100644
|
||||
--- a/sysdrv/source/uboot/u-boot/arch/arm/include/asm/arch-rockchip/boot_mode.h
|
||||
+++ b/sysdrv/source/uboot/u-boot/arch/arm/include/asm/arch-rockchip/boot_mode.h
|
||||
@@ -28,6 +28,8 @@
|
||||
/* enter bootrom download mode */
|
||||
#define BOOT_BROM_DOWNLOAD 0xEF08A53C
|
||||
|
||||
+#define BOOT_TO_UBOOT (REBOOT_FLAG + 16)
|
||||
+
|
||||
#ifndef __ASSEMBLY__
|
||||
int setup_boot_mode(void);
|
||||
#endif
|
||||
diff --git a/sysdrv/source/uboot/u-boot/arch/arm/mach-rockchip/boot_mode.c b/sysdrv/source/uboot/u-boot/arch/arm/mach-rockchip/boot_mode.c
|
||||
index 6f4858bba..cd8b65f25 100644
|
||||
--- a/sysdrv/source/uboot/u-boot/arch/arm/mach-rockchip/boot_mode.c
|
||||
+++ b/sysdrv/source/uboot/u-boot/arch/arm/mach-rockchip/boot_mode.c
|
||||
@@ -194,7 +194,7 @@ int rockchip_get_boot_mode(void)
|
||||
boot_mode[PL] = BOOT_MODE_CHARGING;
|
||||
clear_boot_reg = 1;
|
||||
break;
|
||||
- case BOOT_PANIC:
|
||||
+ case BOOT_PANIC:
|
||||
printf("boot mode: panic\n");
|
||||
boot_mode[PL] = BOOT_MODE_PANIC;
|
||||
break;
|
||||
@@ -203,9 +203,14 @@ int rockchip_get_boot_mode(void)
|
||||
boot_mode[PL] = BOOT_MODE_WATCHDOG;
|
||||
break;
|
||||
case BOOT_QUIESCENT:
|
||||
- printf("boot mode: quiescent\n");
|
||||
- boot_mode[PL] = BOOT_MODE_QUIESCENT;
|
||||
- break;
|
||||
+ printf("boot mode: quiescent\n");
|
||||
+ boot_mode[PL] = BOOT_MODE_QUIESCENT;
|
||||
+ break;
|
||||
+ case BOOT_TO_UBOOT:
|
||||
+ printf("boot mode: uboot\n");
|
||||
+ boot_mode[PL] = BOOT_MODE_UBOOT_TERMINAL;
|
||||
+ clear_boot_reg = 1;
|
||||
+ break;
|
||||
default:
|
||||
printf("boot mode: None\n");
|
||||
boot_mode[PL] = BOOT_MODE_UNDEFINE;
|
||||
@@ -231,6 +236,8 @@ int setup_boot_mode(void)
|
||||
{
|
||||
char env_preboot[256] = {0};
|
||||
|
||||
+ env_set("cli", NULL); /* removed by default */
|
||||
+
|
||||
switch (rockchip_get_boot_mode()) {
|
||||
case BOOT_MODE_BOOTLOADER:
|
||||
printf("enter fastboot!\n");
|
||||
@@ -263,6 +270,10 @@ int setup_boot_mode(void)
|
||||
printf("enter charging!\n");
|
||||
env_set("preboot", "setenv preboot; charge");
|
||||
break;
|
||||
+ case BOOT_MODE_UBOOT_TERMINAL:
|
||||
+ printf("enter uboot!\n");
|
||||
+ env_set("cli", "yes");
|
||||
+ break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
diff --git a/sysdrv/source/uboot/u-boot/common/autoboot.c b/sysdrv/source/uboot/u-boot/common/autoboot.c
|
||||
index c64d566d1..9cf947b98 100644
|
||||
--- a/sysdrv/source/uboot/u-boot/common/autoboot.c
|
||||
+++ b/sysdrv/source/uboot/u-boot/common/autoboot.c
|
||||
@@ -220,7 +220,8 @@ static int __abortboot(int bootdelay)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_ROCKCHIP
|
||||
- if (!IS_ENABLED(CONFIG_CONSOLE_DISABLE_CLI) && ctrlc()) { /* we press ctrl+c ? */
|
||||
+// if (!IS_ENABLED(CONFIG_CONSOLE_DISABLE_CLI) && ctrlc()) { /* we press ctrl+c ? */
|
||||
+ if ((!IS_ENABLED(CONFIG_CONSOLE_DISABLE_CLI) && ctrlc()) || env_get("cli")) { /* we press ctrl+c ? */
|
||||
#else
|
||||
/*
|
||||
* Check if key already pressed
|
||||
diff --git a/sysdrv/source/uboot/u-boot/common/image-fit.c b/sysdrv/source/uboot/u-boot/common/image-fit.c
|
||||
index 0ee9eab69..632551b88 100644
|
||||
--- a/sysdrv/source/uboot/u-boot/common/image-fit.c
|
||||
+++ b/sysdrv/source/uboot/u-boot/common/image-fit.c
|
||||
@@ -32,6 +32,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
#include <u-boot/sha1.h>
|
||||
#include <u-boot/sha256.h>
|
||||
|
||||
+#define FDT_DEFAULT_LOAD_ADDR 0x00c00000
|
||||
#define __round_mask(x, y) ((__typeof__(x))((y)-1))
|
||||
#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
|
||||
|
||||
@@ -2140,7 +2141,13 @@ int fit_image_load_index(bootm_headers_t *images, ulong addr,
|
||||
ret = fit_image_select(fit, noffset, images->verify);
|
||||
if (ret) {
|
||||
bootstage_error(bootstage_id + BOOTSTAGE_SUB_HASH);
|
||||
- return ret;
|
||||
+ /* Use the memory fdt directly */
|
||||
+ printf(" Use the memory fdt directly\n");
|
||||
+ *datap = FDT_DEFAULT_LOAD_ADDR;
|
||||
+ fit_image_get_data_size(fit, noffset, (int *)&size);
|
||||
+ *lenp = (ulong)size;
|
||||
+ return noffset;
|
||||
+ //return ret;
|
||||
}
|
||||
|
||||
bootstage_mark(bootstage_id + BOOTSTAGE_SUB_CHECK_ARCH);
|
||||
@@ -2175,7 +2182,6 @@ int fit_image_load_index(bootm_headers_t *images, ulong addr,
|
||||
fit_image_check_os(fit, noffset, IH_OS_ARM_TRUSTED_FIRMWARE) ||
|
||||
fit_image_check_os(fit, noffset, IH_OS_OP_TEE) ||
|
||||
fit_image_check_os(fit, noffset, IH_OS_U_BOOT) ||
|
||||
- fit_image_check_os(fit, noffset, IH_OS_QNX) ||
|
||||
fit_image_check_os(fit, noffset, IH_OS_OPENRTOS);
|
||||
|
||||
/*
|
||||
@@ -2261,8 +2267,10 @@ int fit_image_load_index(bootm_headers_t *images, ulong addr,
|
||||
return -EXDEV;
|
||||
}
|
||||
|
||||
+ //printf(" Loading %s from 0x%08lx to 0x%08lx\n",
|
||||
+ // prop_name, data, load);
|
||||
printf(" Loading %s from 0x%08lx to 0x%08lx\n",
|
||||
- prop_name, data, load);
|
||||
+ prop_name, image_start, load);
|
||||
|
||||
dst = map_sysmem(load, len);
|
||||
memmove(dst, buf, len);
|
||||
diff --git a/sysdrv/source/uboot/u-boot/drivers/mmc/mmc.c b/sysdrv/source/uboot/u-boot/drivers/mmc/mmc.c
|
||||
index 59805d33a..d352b00a3 100644
|
||||
--- a/sysdrv/source/uboot/u-boot/drivers/mmc/mmc.c
|
||||
+++ b/sysdrv/source/uboot/u-boot/drivers/mmc/mmc.c
|
||||
@@ -2288,6 +2288,11 @@ int mmc_start_init(struct mmc *mmc)
|
||||
|
||||
/* Test for SD version 2 */
|
||||
err = mmc_send_if_cond(mmc);
|
||||
+ if (err) {
|
||||
+ mmc_go_idle(mmc);
|
||||
+ mmc_get_blk_desc(mmc)->hwpart = 0;
|
||||
+ mmc_send_if_cond(mmc);
|
||||
+ }
|
||||
|
||||
/* Now try to get the SD card's operating condition */
|
||||
err = sd_send_op_cond(mmc);
|
||||
diff --git a/sysdrv/source/uboot/u-boot/include/boot_rkimg.h b/sysdrv/source/uboot/u-boot/include/boot_rkimg.h
|
||||
index 9cb709703..fc8356704 100644
|
||||
--- a/sysdrv/source/uboot/u-boot/include/boot_rkimg.h
|
||||
+++ b/sysdrv/source/uboot/u-boot/include/boot_rkimg.h
|
||||
@@ -20,7 +20,8 @@ enum _boot_mode {
|
||||
BOOT_MODE_WATCHDOG,
|
||||
BOOT_MODE_DFU,
|
||||
BOOT_MODE_QUIESCENT,
|
||||
- BOOT_MODE_UNDEFINE,
|
||||
+ BOOT_MODE_UBOOT_TERMINAL,
|
||||
+ BOOT_MODE_UNDEFINE,
|
||||
};
|
||||
|
||||
struct bootloader_message {
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -1,622 +0,0 @@
|
||||
From 8a7f8dcc33ffb580540df5e1dd02b3d3572cb6ee Mon Sep 17 00:00:00 2001
|
||||
From: luckfox-eng29 <eng29@luckfox.com>
|
||||
Date: Wed, 25 Sep 2024 18:49:11 +0800
|
||||
Subject: [PATCH] patch for 115200 bin
|
||||
|
||||
Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
|
||||
---
|
||||
...rv1106_ddr_924MHz_1500000Baud_tb_v1.15.bin | Bin 0 -> 22632 bytes
|
||||
.../rv1106_ddr_924MHz_1500000Baud_v1.15.bin | Bin 0 -> 22632 bytes
|
||||
.../bin/rv11/rv1106_ddr_924MHz_tb_v1.15.bin | Bin 22632 -> 22632 bytes
|
||||
3 files changed, 0 insertions(+), 0 deletions(-)
|
||||
create mode 100644 sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_1500000Baud_tb_v1.15.bin
|
||||
create mode 100644 sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_1500000Baud_v1.15.bin
|
||||
|
||||
diff --git a/sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_1500000Baud_tb_v1.15.bin b/sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_1500000Baud_tb_v1.15.bin
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..95767c2f7a73114dae8356f9ebbca6a10689ecee
|
||||
GIT binary patch
|
||||
literal 22632
|
||||
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Θ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
|
||||
|
||||
literal 0
|
||||
HcmV?d00001
|
||||
|
||||
diff --git a/sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_1500000Baud_v1.15.bin b/sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_1500000Baud_v1.15.bin
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..95767c2f7a73114dae8356f9ebbca6a10689ecee
|
||||
GIT binary patch
|
||||
literal 22632
|
||||
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Θ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
|
||||
|
||||
literal 0
|
||||
HcmV?d00001
|
||||
|
||||
diff --git a/sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_tb_v1.15.bin b/sysdrv/source/uboot/rkbin/bin/rv11/rv1106_ddr_924MHz_tb_v1.15.bin
|
||||
index 95767c2f7a73114dae8356f9ebbca6a10689ecee..561ee68249c2d41d8d300baad7d0aff8b2728ee2 100644
|
||||
GIT binary patch
|
||||
delta 18
|
||||
acmaE{f$_x##tkN}%nXMZH=DZ}3IhO3qXv}#
|
||||
|
||||
delta 18
|
||||
acmaE{f$_x##tkN}%n6UhHk-Q|3IhO82nQ<w
|
||||
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
||||
/*
|
||||
* Copyright (c) 2022 Rockchip Electronics Co., Ltd.
|
||||
*/
|
||||
|
||||
#include "rv1106-thunder-boot.dtsi"
|
||||
|
||||
/ {
|
||||
thunder_boot_mmc: thunder-boot-mmc {
|
||||
compatible = "rockchip,thunder-boot-mmc";
|
||||
reg = <0xffaa0000 0x4000>;
|
||||
clocks = <&cru HCLK_SDMMC>, <&cru CCLK_SRC_SDMMC>;
|
||||
clock-names = "biu", "ciu";
|
||||
memory-region-src = <&ramdisk_c>;
|
||||
memory-region-dst = <&ramdisk_r>;
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user