add lt8911exb driver
This commit is contained in:
parent
6e767291b5
commit
5516f07924
3
clean.sh
3
clean.sh
@ -1,5 +1,6 @@
|
||||
make distclean
|
||||
rm source/uboot-2021.10/include/configs/image_cfg.json
|
||||
#rm source/uboot-2021.10/include/configs/image_cfg.json
|
||||
rm -fr output/*
|
||||
rm tools/scripts/Cryptodome/Cipher/AES.pyc
|
||||
rm tools/scripts/Cryptodome/Cipher/__init__.pyc
|
||||
rm tools/scripts/Cryptodome/Cipher/_mode_cbc.pyc
|
||||
|
||||
@ -39,6 +39,7 @@ CONFIG_BT_HCIUART=y
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_RTL=y
|
||||
CONFIG_CFG80211=y
|
||||
# CONFIG_CFG80211_CRDA_SUPPORT is not set
|
||||
CONFIG_CFG80211_WEXT=y
|
||||
CONFIG_MAC80211=y
|
||||
CONFIG_RFKILL=y
|
||||
@ -98,7 +99,6 @@ CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_ARTINCHIP=y
|
||||
CONFIG_TOUCHSCREEN_GT9XX=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
|
||||
@ -127,11 +127,12 @@ CONFIG_FB=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_PWM=y
|
||||
CONFIG_BACKLIGHT_GPIO=y
|
||||
CONFIG_LT8911EXB=y
|
||||
CONFIG_ARTINCHIP_GE=y
|
||||
CONFIG_ARTINCHIP_VE=y
|
||||
CONFIG_ARTINCHIP_FB=y
|
||||
CONFIG_AIC_DISP_LVDS=y
|
||||
CONFIG_AIC_PANEL_LVDS_GENERAL=y
|
||||
CONFIG_AIC_DISP_MIPI_DSI=y
|
||||
CONFIG_AIC_PANEL_DSI_SIMPLE=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SOC=y
|
||||
|
||||
@ -24,6 +24,7 @@ source "drivers/video/fbdev/Kconfig"
|
||||
endmenu
|
||||
|
||||
source "drivers/video/backlight/Kconfig"
|
||||
source "drivers/video/lt8911exb/Kconfig"
|
||||
|
||||
config VGASTATE
|
||||
tristate
|
||||
|
||||
@ -9,6 +9,7 @@ obj-y += backlight/
|
||||
|
||||
obj-y += fbdev/
|
||||
obj-y += artinchip/
|
||||
obj-y += lt8911exb/
|
||||
|
||||
obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
|
||||
ifeq ($(CONFIG_OF),y)
|
||||
|
||||
@ -71,15 +71,15 @@ static struct aic_panel_funcs panel_funcs = {
|
||||
|
||||
/* Init the videomode parameter, dts will override the initial value. */
|
||||
static struct videomode panel_vm = {
|
||||
.pixelclock = 130000000,
|
||||
.hactive = 1200,
|
||||
.hfront_porch = 160,
|
||||
.hback_porch = 160,
|
||||
.hsync_len = 40,
|
||||
.vactive = 1920,
|
||||
.vfront_porch = 10,
|
||||
.vback_porch = 20,
|
||||
.vsync_len = 8,
|
||||
.pixelclock = 150 * 1000 * 1000,
|
||||
.hactive = 1920,
|
||||
.hfront_porch = 188,
|
||||
.hback_porch = 148,
|
||||
.hsync_len = 44,
|
||||
.vactive = 1080,
|
||||
.vfront_porch = 4,
|
||||
.vback_porch = 36,
|
||||
.vsync_len = 5,
|
||||
.flags = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
|
||||
DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE
|
||||
};
|
||||
|
||||
10
source/linux-5.10/drivers/video/lt8911exb/Kconfig
Executable file
10
source/linux-5.10/drivers/video/lt8911exb/Kconfig
Executable file
@ -0,0 +1,10 @@
|
||||
|
||||
config LT8911EXB
|
||||
tristate "LT8911EXB Driver"
|
||||
default n
|
||||
help
|
||||
Control LT8911EXB Chip
|
||||
Select m:build as a separate module;
|
||||
Select y:Build into the kernel
|
||||
Select n:Not build
|
||||
|
||||
32
source/linux-5.10/drivers/video/lt8911exb/LT8911EXB_Main.c
Executable file
32
source/linux-5.10/drivers/video/lt8911exb/LT8911EXB_Main.c
Executable file
@ -0,0 +1,32 @@
|
||||
#include "include/include.h"
|
||||
|
||||
bool g_irq_flag = 0;
|
||||
|
||||
|
||||
int LT8911EXB_Main(void *data)
|
||||
{
|
||||
|
||||
printk("LT8911EXB Init Start:");
|
||||
|
||||
LT8911_Reset();
|
||||
msleep(100);
|
||||
LT8911_ChipID();
|
||||
LT8911_SetVideoTiming(&video);
|
||||
LT8911_Init(&video);
|
||||
LT8911_LinkTrain();
|
||||
|
||||
LT8911_LinkTrainResultCheck();
|
||||
LT8911_video_check() ;
|
||||
LT8911_pcr_mk_printk();
|
||||
LT8911_htotal_stable_printk();
|
||||
|
||||
|
||||
while(!atomic_read(&thread_should_stop))
|
||||
{
|
||||
LT8911_MainLoop(&video);
|
||||
msleep(500);
|
||||
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
283
source/linux-5.10/drivers/video/lt8911exb/LontiumDrv.c
Executable file
283
source/linux-5.10/drivers/video/lt8911exb/LontiumDrv.c
Executable file
@ -0,0 +1,283 @@
|
||||
#include "include/include.h"
|
||||
|
||||
|
||||
struct _lt8911exb *lt8911exb;
|
||||
static struct task_struct *kthread_obj;
|
||||
atomic_t thread_should_stop = ATOMIC_INIT(0);
|
||||
char *ChipName = "lt8911exb"; //Define Lontium Chip Name
|
||||
static int major = 0;
|
||||
static struct cdev chip_cdev;
|
||||
static struct class *chip_class;
|
||||
|
||||
|
||||
|
||||
static int chip_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
printk("chip open\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int chip_close (struct inode *node, struct file *file)
|
||||
{
|
||||
printk("chip close\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static ssize_t chip_read(struct file *filp, char __user *buf, size_t cnt, loff_t *offt)
|
||||
{
|
||||
Chip_Control_Args parameter;
|
||||
|
||||
if (copy_from_user(¶meter, buf, sizeof(parameter))) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
parameter.value = HDMI_ReadI2C_Byte(parameter.address);
|
||||
|
||||
if (copy_to_user(buf, ¶meter, sizeof(parameter))) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return sizeof(parameter);
|
||||
|
||||
}
|
||||
|
||||
static ssize_t chip_write(struct file *filp, const char __user *buf, size_t cnt, loff_t *offt)
|
||||
{
|
||||
Chip_Control_Args parameter;
|
||||
|
||||
if (copy_from_user(¶meter, buf, sizeof(parameter))) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
HDMI_WriteI2C_Byte(parameter.address, parameter.value);
|
||||
|
||||
return sizeof(parameter);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static struct file_operations chip_drv = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = chip_open,
|
||||
.release = chip_close,
|
||||
.read = chip_read,
|
||||
.write = chip_write,
|
||||
};
|
||||
|
||||
|
||||
|
||||
static int chip_dev_init(void)
|
||||
{
|
||||
int ret;
|
||||
dev_t devid;
|
||||
|
||||
ret = alloc_chrdev_region(&devid, 0, 1, ChipName);
|
||||
if (ret < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
major = MAJOR(devid);
|
||||
cdev_init(&chip_cdev, &chip_drv);
|
||||
cdev_add(&chip_cdev, devid, 1);
|
||||
chip_class = class_create(THIS_MODULE, "chip_class");
|
||||
if (IS_ERR(chip_class)) {
|
||||
unregister_chrdev(major, ChipName);
|
||||
return -1;
|
||||
}
|
||||
|
||||
device_create(chip_class, NULL, MKDEV(major, 0), NULL, ChipName); /* /dev/ChipName */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void chip_dev_exit(void)
|
||||
{
|
||||
device_destroy(chip_class, MKDEV(major, 0));
|
||||
class_destroy(chip_class);
|
||||
cdev_del(&chip_cdev);
|
||||
unregister_chrdev_region(MKDEV(major,0), 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static const struct regmap_range chip_ranges[] = {
|
||||
{ .range_min = 0, .range_max = 0xffff },
|
||||
};
|
||||
|
||||
static const struct regmap_access_table chip_table = {
|
||||
.yes_ranges = chip_ranges,
|
||||
.n_yes_ranges = ARRAY_SIZE(chip_ranges),
|
||||
};
|
||||
|
||||
static const struct regmap_config chip_regmap_config = {
|
||||
.reg_bits = 8,
|
||||
.val_bits = 8,
|
||||
.volatile_table = &chip_table,
|
||||
.cache_type = REGCACHE_NONE,
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* devm_gpiod_get_optional - If this fails, NULL is returned and no error pointer.
|
||||
*
|
||||
* devm_gpiod_get - If this fails, an error pointer is returned, usually ERR_PTR(-ENOENT).
|
||||
*
|
||||
* The devm_gpiod_get function is recommended for practical use.
|
||||
*/
|
||||
static int chip_parse_dts(struct device *dev)
|
||||
{
|
||||
|
||||
//Gets the handle to power gpio in dts
|
||||
|
||||
lt8911exb->power_gpio=devm_gpiod_get_optional(dev, "power", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(lt8911exb->power_gpio)) {
|
||||
dev_err(dev, "Failed to get power GPIO\n");
|
||||
return PTR_ERR(lt8911exb->power_gpio);
|
||||
}
|
||||
|
||||
|
||||
//Gets the handle to reset gpio in dts
|
||||
|
||||
lt8911exb->reset_gpio=devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(lt8911exb->reset_gpio)) {
|
||||
dev_err(dev, "Failed to get reset GPIO\n");
|
||||
return PTR_ERR(lt8911exb->reset_gpio);
|
||||
}
|
||||
|
||||
|
||||
// Additional GPIO pins can be added here if needed
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int chip_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
||||
{
|
||||
int ret;
|
||||
|
||||
chip_dev_init();
|
||||
|
||||
lt8911exb = devm_kzalloc(&client->dev, sizeof(*lt8911exb), GFP_KERNEL);
|
||||
if (lt8911exb == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
lt8911exb->trans_i2c = client;
|
||||
|
||||
lt8911exb->dev = &client->dev;
|
||||
|
||||
lt8911exb->chip_regmap = devm_regmap_init_i2c(client, &chip_regmap_config);
|
||||
if (IS_ERR(lt8911exb->chip_regmap)) {
|
||||
dev_err(&client->dev, "Failed to initialize regmap\n");
|
||||
return PTR_ERR(lt8911exb->chip_regmap);
|
||||
}
|
||||
|
||||
ret = chip_parse_dts(lt8911exb->dev);
|
||||
if (ret<0){
|
||||
dev_err(&client->dev, "Failed to parse device tree\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
i2c_set_clientdata(client, lt8911exb);
|
||||
|
||||
kthread_obj = kthread_run(LT8911EXB_Main, NULL, "LT8911EXB_kthread");
|
||||
if (IS_ERR(kthread_obj)) {
|
||||
kthread_obj = NULL;
|
||||
chip_dev_exit();
|
||||
dev_err(&client->dev, "Failed to create kernel thread\n");
|
||||
return PTR_ERR(kthread_obj);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
static int chip_remove(struct i2c_client *client)
|
||||
{
|
||||
|
||||
if (kthread_obj) {
|
||||
atomic_set(&thread_should_stop, 1);
|
||||
kthread_stop(kthread_obj);
|
||||
kthread_obj = NULL;
|
||||
}
|
||||
|
||||
chip_dev_exit();
|
||||
|
||||
printk("driver removed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int chip_suspend(struct device *dev)
|
||||
{
|
||||
|
||||
//power off
|
||||
atomic_set(&thread_should_stop, 1);
|
||||
kthread_stop(kthread_obj);
|
||||
msleep(5);
|
||||
gpiod_set_value(lt8911exb->power_gpio,0);
|
||||
printk(KERN_INFO "lt8911exb Suspend");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int chip_resume(struct device *dev)
|
||||
{
|
||||
|
||||
//power on
|
||||
gpiod_set_value(lt8911exb->power_gpio,1);
|
||||
msleep(5);
|
||||
atomic_set(&thread_should_stop, 0);
|
||||
kthread_obj = kthread_run(LT8911EXB_Main, NULL, "LT8911EXB_kthread");
|
||||
printk(KERN_INFO "lt8911exb Resume");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static const struct dev_pm_ops chip_pm_ops = {
|
||||
.suspend = chip_suspend,
|
||||
.resume = chip_resume,
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
static const struct i2c_device_id chip_ids[] = {
|
||||
{"lt8911exb", 0},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, chip_ids);
|
||||
|
||||
|
||||
static const struct of_device_id chip_id_table[] = {
|
||||
{.compatible = "lontium,lt8911exb"},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, chip_id_table);
|
||||
|
||||
|
||||
static struct i2c_driver chip_driver = {
|
||||
.driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "lt8911exb",
|
||||
.pm = &chip_pm_ops,
|
||||
.of_match_table = chip_id_table,
|
||||
|
||||
},
|
||||
.probe = chip_probe,
|
||||
.remove = chip_remove,
|
||||
.id_table = chip_ids,
|
||||
};
|
||||
|
||||
|
||||
module_i2c_driver(chip_driver);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_DESCRIPTION("LT8911EXB driver");
|
||||
MODULE_AUTHOR("Tony <syyang@lontium.com>");
|
||||
5
source/linux-5.10/drivers/video/lt8911exb/Makefile
Executable file
5
source/linux-5.10/drivers/video/lt8911exb/Makefile
Executable file
@ -0,0 +1,5 @@
|
||||
|
||||
lt8911exb-y := LontiumDrv.o LT8911EXB_Main.o OcmI2cMaster.o lt8911.o
|
||||
|
||||
obj-$(CONFIG_LT8911EXB) += lt8911exb.o
|
||||
|
||||
72
source/linux-5.10/drivers/video/lt8911exb/OcmI2cMaster.c
Executable file
72
source/linux-5.10/drivers/video/lt8911exb/OcmI2cMaster.c
Executable file
@ -0,0 +1,72 @@
|
||||
#include "include/include.h"
|
||||
|
||||
|
||||
|
||||
static unsigned char g_ucLogLevel = LOG_DEBUG;
|
||||
static char *messageTypeStr[] = {"DEBUG","INFO","WARN", "ERROR","CRIT"};
|
||||
|
||||
//void Ocm_PrintLevel_Set(unsigned char ucLvl)
|
||||
//{
|
||||
// g_ucLogLevel = ucLvl;
|
||||
//}
|
||||
|
||||
void LTLog(unsigned char ucLvl, const char *fmt, ...)
|
||||
{
|
||||
char buf[MAX_NUMBER_BYTES] = {0};
|
||||
va_list args;
|
||||
if (ucLvl > LOG_NOTRACE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//打印大于等于该级别的字符串
|
||||
if(ucLvl >= g_ucLogLevel)
|
||||
{
|
||||
va_start(args, fmt);
|
||||
vsprintf(buf, fmt, args);
|
||||
va_end(args);
|
||||
//左对齐5个字符
|
||||
printk("\n[%-5s] %s", messageTypeStr[ucLvl], buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int HDMI_WriteI2C_Byte(u8 addr,u8 data)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
|
||||
ret = regmap_write(lt8911exb->chip_regmap, addr, data);
|
||||
|
||||
if (ret < 0) {
|
||||
printk("regmap_write error: (0x%02x 0x%02x 0x%02x) %d",
|
||||
lt8911exb->trans_i2c->addr, addr, data, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HDMI_ReadI2C_Byte(u8 addr)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned int val = 0;
|
||||
|
||||
ret = regmap_read(lt8911exb->chip_regmap, addr, &val);
|
||||
|
||||
if (ret < 0) {
|
||||
printk("regmap_read error: (0x%02x 0x%02x) %d",
|
||||
lt8911exb->trans_i2c->addr, addr, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
return (u8)val;
|
||||
}
|
||||
|
||||
|
||||
EXPORT_SYMBOL(HDMI_WriteI2C_Byte);
|
||||
EXPORT_SYMBOL(HDMI_ReadI2C_Byte);
|
||||
Binary file not shown.
Binary file not shown.
11
source/linux-5.10/drivers/video/lt8911exb/include/LT8911EXB_Main.h
Executable file
11
source/linux-5.10/drivers/video/lt8911exb/include/LT8911EXB_Main.h
Executable file
@ -0,0 +1,11 @@
|
||||
#ifndef _LT8911EXB_MAIN_H_
|
||||
#define _LT8911EXB_MAIN_H_
|
||||
|
||||
|
||||
|
||||
|
||||
extern bool g_irq_flag;
|
||||
extern int LT8911EXB_Main(void *data);
|
||||
|
||||
|
||||
#endif
|
||||
27
source/linux-5.10/drivers/video/lt8911exb/include/LontiumDrv.h
Executable file
27
source/linux-5.10/drivers/video/lt8911exb/include/LontiumDrv.h
Executable file
@ -0,0 +1,27 @@
|
||||
#ifndef _LONTIUMDRV_H_
|
||||
#define _LONTIUMDRV_H_
|
||||
|
||||
|
||||
struct _lt8911exb{
|
||||
struct device *dev;
|
||||
struct mutex ocm_lock;
|
||||
struct gpio_desc *reset_gpio;
|
||||
struct gpio_desc *power_gpio;
|
||||
struct i2c_client *trans_i2c;
|
||||
struct regmap *chip_regmap;
|
||||
};
|
||||
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u8 address; // 寄存器地址
|
||||
u8 value; // 寄存器值
|
||||
} Chip_Control_Args;
|
||||
|
||||
|
||||
extern struct _lt8911exb *lt8911exb;
|
||||
extern atomic_t thread_should_stop;
|
||||
|
||||
|
||||
#endif
|
||||
22
source/linux-5.10/drivers/video/lt8911exb/include/OcmI2cMaster.h
Executable file
22
source/linux-5.10/drivers/video/lt8911exb/include/OcmI2cMaster.h
Executable file
@ -0,0 +1,22 @@
|
||||
#ifndef _OCMI2CMASTER_H_
|
||||
#define _OCMI2CMASTER_H_
|
||||
|
||||
#define MAX_NUMBER_BYTES 128
|
||||
|
||||
typedef enum
|
||||
{
|
||||
LOG_DEBUG =0x00,
|
||||
LOG_INFO,
|
||||
LOG_WARN,
|
||||
LOG_ERROR,
|
||||
LOG_CRITICAL,
|
||||
LOG_NOTRACE,
|
||||
} LT_LogLevel;
|
||||
|
||||
void LTLog(unsigned char ucLvl, const char *fmt, ...);
|
||||
|
||||
|
||||
extern int HDMI_WriteI2C_Byte(u8 addr,u8 data);
|
||||
extern int HDMI_ReadI2C_Byte(u8 addr);
|
||||
|
||||
#endif
|
||||
39
source/linux-5.10/drivers/video/lt8911exb/include/include.h
Executable file
39
source/linux-5.10/drivers/video/lt8911exb/include/include.h
Executable file
@ -0,0 +1,39 @@
|
||||
#ifndef _INCLUDE_H_
|
||||
#define _INCLUDE_H_
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kobject.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/kmod.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
|
||||
#include "type.h"
|
||||
#include "LontiumDrv.h"
|
||||
|
||||
#include "LT8911EXB_Main.h"
|
||||
#include "lt8911.h"
|
||||
|
||||
#include "OcmI2cMaster.h"
|
||||
|
||||
|
||||
#endif
|
||||
72
source/linux-5.10/drivers/video/lt8911exb/include/lt8911.h
Executable file
72
source/linux-5.10/drivers/video/lt8911exb/include/lt8911.h
Executable file
@ -0,0 +1,72 @@
|
||||
#ifndef _LT8911EXB_H_
|
||||
#define _LT8911EXB_H_
|
||||
|
||||
//////////////////////LT8911 Config///////////////////
|
||||
//#define _1920x1200_eDP_Panel_
|
||||
#define _1080P_eDP_Panel_
|
||||
//#define _1366x768_eDP_Panel_
|
||||
//#define _1280x800_eDP_Panel_
|
||||
//#define _1600x900_eDP_Panel_
|
||||
|
||||
#define SCRAMBLE_MODE 0x00 //0x80: edp, 0x00: dp
|
||||
|
||||
//#define sync_polarity 0x00 //0x00: no_adj; 0x20: vs_adj; 0x10: hs_adj; 0x30: H/Vs adj;
|
||||
|
||||
//#define _6bit_
|
||||
|
||||
//#define _dither_enable_
|
||||
|
||||
#define _eDP_2G7_
|
||||
//#define _eDP_1G62_
|
||||
|
||||
#define _link_train_enable_
|
||||
|
||||
//////////option for debug///////////
|
||||
//#define _read_edid_
|
||||
//#define _EDP_Pattern_
|
||||
//#define _Msa_Active_Only_
|
||||
#define _pcr_mk_printk_
|
||||
#define _htotal_stable_check_
|
||||
|
||||
//#define _gpio_sync_output_
|
||||
//#define sync_source 0x01 //gpio output lvds Rx sync
|
||||
#define sync_source 0x02 //gpio output lvds portA sync
|
||||
//#define sync_source 0x03 //gpio output lvds portB sync
|
||||
//gpio2: de, gpio3: vs, gpio4: hs.
|
||||
|
||||
struct video_timing{
|
||||
u16 hfp;
|
||||
u16 hs;
|
||||
u16 hbp;
|
||||
u16 hact;
|
||||
u16 htotal;
|
||||
u16 vfp;
|
||||
u16 vs;
|
||||
u16 vbp;
|
||||
u16 vact;
|
||||
u16 vtotal;
|
||||
u32 pclk_khz;
|
||||
};
|
||||
|
||||
struct Lane_No{
|
||||
u8 swing_high_byte;
|
||||
u8 swing_low_byte;
|
||||
u8 emph_high_byte;
|
||||
u8 emph_low_byte;
|
||||
};
|
||||
|
||||
|
||||
extern struct video_timing video;
|
||||
|
||||
extern void LT8911_Reset(void);
|
||||
extern void LT8911_ChipID(void);
|
||||
extern void LT8911_SetVideoTiming(struct video_timing *video_format);
|
||||
extern void LT8911_Init(struct video_timing *video_format);
|
||||
extern void LT8911_LinkTrain(void);
|
||||
extern void LT8911_LinkTrainResultCheck(void);
|
||||
extern void LT8911_video_check(void);
|
||||
extern void LT8911_pcr_mk_printk(void);
|
||||
extern void LT8911_htotal_stable_printk(void);
|
||||
extern void LT8911_MainLoop(struct video_timing *video_format);
|
||||
|
||||
#endif
|
||||
10
source/linux-5.10/drivers/video/lt8911exb/include/type.h
Executable file
10
source/linux-5.10/drivers/video/lt8911exb/include/type.h
Executable file
@ -0,0 +1,10 @@
|
||||
#ifndef _TYPE_H_
|
||||
#define _TYPE_H_
|
||||
|
||||
|
||||
#define HIGH 1
|
||||
#define LOW 0
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
1027
source/linux-5.10/drivers/video/lt8911exb/lt8911.c
Executable file
1027
source/linux-5.10/drivers/video/lt8911exb/lt8911.c
Executable file
File diff suppressed because it is too large
Load Diff
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IAB
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IAB
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IAD
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IAD
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IMB
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IMB
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IMD
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.IMD
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PFI
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PFI
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PO
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PO
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PR
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PR
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PRI
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PRI
Executable file
Binary file not shown.
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PS
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.PS
Executable file
Binary file not shown.
4
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.SearchResults
Executable file
4
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.SearchResults
Executable file
@ -0,0 +1,4 @@
|
||||
---- LT8911_Init Matches (3 in 3 files) ----
|
||||
Lt8911.c (d:\龙迅产品程序整理(深圳)\lt8911\lt8911\lt8911exb\democode\for linux\lt8911exb_linux_driver_v1.0.2):void LT8911_Init(struct video_timing *video_format)
|
||||
Lt8911.h (d:\龙迅产品程序整理(深圳)\lt8911\lt8911\lt8911exb\democode\for linux\lt8911exb_linux_driver_v1.0.2\include):extern void LT8911_Init(struct video_timing *video_format);
|
||||
LT8911EXB_Main.c (d:\龙迅产品程序整理(深圳)\lt8911\lt8911\lt8911exb\democode\for linux\lt8911exb_linux_driver_v1.0.2): LT8911_Init();
|
||||
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.WK3
Executable file
BIN
source/linux-5.10/drivers/video/lt8911exb/si/LT8911EXB.WK3
Executable file
Binary file not shown.
@ -138,8 +138,8 @@ CONFIG_DM_VIDEO=y
|
||||
CONFIG_DISPLAY=y
|
||||
CONFIG_ARTINCHIP_GRAPHICS=y
|
||||
CONFIG_VIDEO_ARTINCHIP=y
|
||||
CONFIG_AIC_DISP_LVDS=y
|
||||
CONFIG_AIC_PANEL_LVDS_GENERAL=y
|
||||
CONFIG_AIC_DISP_MIPI_DSI=y
|
||||
CONFIG_AIC_PANEL_DSI_SIMPLE=y
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_WATCHDOG_AUTOSTART is not set
|
||||
CONFIG_WDT=y
|
||||
|
||||
@ -139,12 +139,16 @@ static struct aic_pll clk_plls[] = {
|
||||
0, AIC_PLL_INT),
|
||||
CLK_PLL(CLK_PLL_INT1, PLL_INT1_GEN_REG, PLL_INT1_CFG_REG,
|
||||
0, AIC_PLL_INT),
|
||||
// CLK_PLL(CLK_PLL_FRA0, PLL_FRA0_GEN_REG, PLL_FRA0_CFG_REG,
|
||||
// PLL_FRA0_SDM_REG, AIC_PLL_SDM),
|
||||
CLK_PLL(CLK_PLL_FRA0, PLL_FRA0_GEN_REG, PLL_FRA0_CFG_REG,
|
||||
PLL_FRA0_SDM_REG, AIC_PLL_SDM),
|
||||
PLL_FRA0_SDM_REG, AIC_PLL_FRA),
|
||||
CLK_PLL(CLK_PLL_FRA1, PLL_FRA1_GEN_REG, PLL_FRA1_CFG_REG,
|
||||
PLL_FRA1_SDM_REG, AIC_PLL_FRA),
|
||||
// CLK_PLL_VIDEO(CLK_PLL_FRA2, PLL_FRA2_GEN_REG, PLL_FRA2_CFG_REG,
|
||||
// PLL_FRA2_SDM_REG, AIC_PLL_SDM, 0, 1200000000),
|
||||
CLK_PLL_VIDEO(CLK_PLL_FRA2, PLL_FRA2_GEN_REG, PLL_FRA2_CFG_REG,
|
||||
PLL_FRA2_SDM_REG, AIC_PLL_SDM, 0, 1200000000),
|
||||
PLL_FRA2_SDM_REG, AIC_PLL_FRA, 0, 1200000000),
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -192,6 +192,16 @@ static const struct spinand_info gigadevice_spinand_table[] = {
|
||||
SPINAND_HAS_QE_BIT,
|
||||
SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
gd5fxgq4uexxg_ecc_get_status)),
|
||||
SPINAND_INFO("GD5F2GM7UEY1G",
|
||||
SPINAND_ID(0x92),
|
||||
NAND_MEMORG(1, 2048, 128, 64, 2048, 1, 1, 1),
|
||||
NAND_ECCREQ(8, 512),
|
||||
SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5,
|
||||
&write_cache_variants,
|
||||
&update_cache_variants),
|
||||
SPINAND_HAS_QE_BIT,
|
||||
SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout,
|
||||
gd5fxgq4uexxg_ecc_get_status)),
|
||||
};
|
||||
|
||||
static int gigadevice_spinand_detect(struct spinand_device *spinand)
|
||||
|
||||
@ -62,6 +62,15 @@ static struct aic_panel_funcs panel_funcs = {
|
||||
|
||||
/* Init the videomode parameter, dts will override the initial value. */
|
||||
static struct fb_videomode panel_vm = {
|
||||
.pixclock = 150 * 1000 * 1000,
|
||||
.xres = 1920,
|
||||
.right_margin = 188,
|
||||
.left_margin = 148,
|
||||
.hsync_len = 44,
|
||||
.yres = 1080,
|
||||
.lower_margin = 4,
|
||||
.upper_margin = 36,
|
||||
.vsync_len = 5,
|
||||
.flag = DISPLAY_FLAGS_HSYNC_LOW | DISPLAY_FLAGS_VSYNC_LOW |
|
||||
DISPLAY_FLAGS_DE_HIGH | DISPLAY_FLAGS_PIXDATA_POSEDGE
|
||||
};
|
||||
|
||||
1
source/uboot-2021.10/include/configs/image_cfg.json
Symbolic link
1
source/uboot-2021.10/include/configs/image_cfg.json
Symbolic link
@ -0,0 +1 @@
|
||||
/home/hyx/work/linuxOS_D21X/target/d211/demo128_nand/image_cfg.json
|
||||
@ -35,7 +35,6 @@ BR2_LINUX_KERNEL_DEFCONFIG="d211_demo128_nand"
|
||||
BR2_LINUX_KERNEL_IMAGEGZ=y
|
||||
BR2_PACKAGE_LINUX_TOOLS_SELFTESTS=y
|
||||
# BR2_PACKAGE_AIC_AUTHORIZATION is not set
|
||||
BR2_PACKAGE_LVGL_UI=y
|
||||
# BR2_PACKAGE_TEST_DVP is not set
|
||||
# BR2_PACKAGE_TEST_TOUCHSCREEN is not set
|
||||
BR2_PACKAGE_BUSYBOX_CONFIG="package/third-party/busybox/configs/d211_demo128_nand_defconfig"
|
||||
|
||||
@ -34,7 +34,7 @@ kernel_comp_size=0x1000000
|
||||
# set_commonargs=setenv bootargs earlycon=${earlycon} earlyprintk rdinit=${init} initramfs_dbg=${ramfs_dbg}
|
||||
set_commonargs_recovery=setenv bootargs earlycon=${earlycon} earlyprintk rdinit=/linuxrc
|
||||
# Case 2: Mount rootfs directly
|
||||
set_commonargs=setenv bootargs quiet earlycon=${earlycon} earlyprintk init=/linuxrc firmware_class.path=/etc/firmware
|
||||
set_commonargs=setenv bootargs earlycon=${earlycon} earlyprintk init=/linuxrc firmware_class.path=/etc/firmware
|
||||
|
||||
|
||||
#===============================================================================
|
||||
|
||||
@ -167,90 +167,31 @@
|
||||
};
|
||||
#endif
|
||||
|
||||
panel_rgb {
|
||||
compatible = "artinchip,aic-general-rgb-panel";
|
||||
status = "disabled";
|
||||
|
||||
enable-gpios = <&gpio_e 19 GPIO_ACTIVE_HIGH>;
|
||||
rgb-mode = <PRGB>;
|
||||
interface-format = <PRGB_16BIT_LD>;
|
||||
clock-phase = <DEGREE_0>;
|
||||
data-order = <RGB>;
|
||||
disp-dither = <DITHER_RGB565>;
|
||||
panel_dsi {
|
||||
compatible = "artinchip,aic-dsi-panel-simple";
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
port {
|
||||
u-boot,dm-pre-reloc;
|
||||
panel_rgb_in: endpoint {
|
||||
remote-endpoint = <&rgb0_out>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
display-timings {
|
||||
native-mode = <&timing0>;
|
||||
u-boot,dm-pre-reloc;
|
||||
timing0: 1024x600 {
|
||||
clock-frequency = <52000000>;
|
||||
hactive = <1024>;
|
||||
vactive = <600>;
|
||||
hback-porch = <160>;
|
||||
hfront-porch = <160>;
|
||||
hsync-len = <20>;
|
||||
vback-porch = <12>;
|
||||
vfront-porch = <20>;
|
||||
vsync-len = <3>;
|
||||
de-active = <1>;
|
||||
pixelclk-active = <1>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
panel_lvds {
|
||||
compatible = "artinchip,aic-general-lvds-panel";
|
||||
data-mapping = "vesa-24";
|
||||
data-channel = "single-link1";
|
||||
backlight = <&backlight>;
|
||||
status = "okay";
|
||||
u-boot,dm-pre-reloc;
|
||||
|
||||
enable-gpios = <&gpio_c 7 GPIO_ACTIVE_HIGH>;
|
||||
sleep-gpios = <&gpio_a 3 GPIO_ACTIVE_HIGH>;
|
||||
//reset-gpios = <&gpio_e 1 GPIO_ACTIVE_HIGH>;
|
||||
|
||||
port {
|
||||
panel_lvds_in: endpoint {
|
||||
remote-endpoint = <&lvds0_out>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
display-timings {
|
||||
native-mode = <&timing1>;
|
||||
u-boot,dm-pre-reloc;
|
||||
timing1: 1024x600 {
|
||||
clock-frequency = <52000000>;
|
||||
hactive = <1024>;
|
||||
vactive = <600>;
|
||||
hback-porch = <160>;
|
||||
hfront-porch = <160>;
|
||||
hsync-len = <20>;
|
||||
vback-porch = <20>;
|
||||
vfront-porch = <12>;
|
||||
vsync-len = <3>;
|
||||
de-active = <1>;
|
||||
pixelclk-active = <1>;
|
||||
panel_dsi_in: endpoint {
|
||||
u-boot,dm-pre-reloc;
|
||||
remote-endpoint = <&dsi0_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
backlight: backlight {
|
||||
compatible = "pwm-backlight";
|
||||
/* pwm node name; pwm device No.; period_ns; pwm_polarity */
|
||||
pwms = <&pwm 3 1000000 0>;
|
||||
pwms = <&pwm 0 1000000 0>;
|
||||
brightness-levels = <0 10 20 30 40 50 60 70 80 90 100>;
|
||||
default-brightness-level = <6>;
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "disabled";
|
||||
status = "okay";
|
||||
};
|
||||
rfkill_bt {
|
||||
compatible = "rfkill-gpio";
|
||||
@ -409,11 +350,16 @@
|
||||
&i2c0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0_pins_b>;
|
||||
status = "disabled";
|
||||
rtc@32 {
|
||||
compatible = "epson,rx8010";
|
||||
reg = <0x32>;
|
||||
status = "okay";
|
||||
|
||||
lt8911exb@29 {
|
||||
status = "okay";
|
||||
compatible = "lontium,lt8911exb";
|
||||
reg = <0x29>;
|
||||
reset-gpios = <&gpio_e 6 GPIO_ACTIVE_HIGH>;
|
||||
power-gpios = <&gpio_e 2 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
@ -431,10 +377,10 @@
|
||||
&i2c3 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c3_pins_a>;
|
||||
status = "okay";
|
||||
status = "disabled";
|
||||
|
||||
gt9xx@5d {
|
||||
status = "okay";
|
||||
status = "disabled";
|
||||
compatible = "goodix,gt9xx";
|
||||
reg = <0x5d>;
|
||||
reset-gpios = <&gpio_a 8 GPIO_ACTIVE_LOW>;
|
||||
@ -610,9 +556,9 @@
|
||||
};
|
||||
};
|
||||
|
||||
pwm3_pins_d: pwm3-3 {
|
||||
pwm0_pins_d: pwm0-3 {
|
||||
pins {
|
||||
pinmux = <AIC_PINMUX('E', 19, 5)>;
|
||||
pinmux = <AIC_PINMUX('E', 1, 8)>;
|
||||
bias-disable;
|
||||
drive-strength = <3>;
|
||||
};
|
||||
@ -643,12 +589,12 @@
|
||||
gpio_f: bank-5 {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
lvds1_pins: lvds1-0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
dsi_pins: dsi-0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
uart0_pins_a: uart0-0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins1 {
|
||||
@ -664,6 +610,12 @@
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
pwm0_pins_d: pwm0-3 {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins {
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
sdmc1_pins: sdmc1-0 {
|
||||
u-boot,dm-pre-reloc;
|
||||
pins {
|
||||
@ -683,7 +635,7 @@
|
||||
aic,use_extclk;
|
||||
|
||||
|
||||
status = "okay";
|
||||
status = "disabled";
|
||||
|
||||
gmac0_mdio: mdio {
|
||||
compatible = "aicmac-mdio";
|
||||
@ -718,7 +670,7 @@
|
||||
|
||||
&fb0 {
|
||||
artinchip,uboot-logo-on=<1>;
|
||||
height-virtual = <1200>;
|
||||
height-virtual = <2160>;
|
||||
u-boot,dm-pre-reloc;
|
||||
port {
|
||||
u-boot,dm-pre-reloc;
|
||||
@ -739,6 +691,7 @@
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
u-boot,dm-pre-reloc;
|
||||
de0_in: endpoint {
|
||||
remote-endpoint = <&fb0_out>;
|
||||
u-boot,dm-pre-reloc;
|
||||
@ -747,48 +700,27 @@
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
u-boot,dm-pre-reloc;
|
||||
de0_out: endpoint {
|
||||
remote-endpoint = <&lvds0_in>;
|
||||
remote-endpoint = <&dsi0_in>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&rgb0 {
|
||||
pinctrl-names = "default", "sleep";
|
||||
pinctrl-0 = <&lcd_rgb565_ld_pins>;
|
||||
pinctrl-1 = <&lcd_rgb565_ld_sleep_pins>;
|
||||
u-boot,dm-pre-reloc;
|
||||
status = "disabled";
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
u-boot,dm-pre-reloc;
|
||||
rgb0_in: endpoint {
|
||||
remote-endpoint = <&rgb0_in>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
u-boot,dm-pre-reloc;
|
||||
rgb0_out: endpoint {
|
||||
remote-endpoint = <&panel_rgb_in>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&lvds0 {
|
||||
&dsi0 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&lvds1_pins>;
|
||||
pinctrl-0 = <&dsi_pins>;
|
||||
status = "okay";
|
||||
u-boot,dm-pre-reloc;
|
||||
data-lanes = <3 2 1 0>;
|
||||
lane-polarities = <0 0 0 0>;
|
||||
|
||||
port@0 {
|
||||
reg = <0>;
|
||||
lvds0_in: endpoint {
|
||||
u-boot,dm-pre-reloc;
|
||||
dsi0_in: endpoint {
|
||||
remote-endpoint = <&de0_out>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
@ -796,8 +728,9 @@
|
||||
|
||||
port@1 {
|
||||
reg = <1>;
|
||||
lvds0_out: endpoint {
|
||||
remote-endpoint = <&panel_lvds_in>;
|
||||
u-boot,dm-pre-reloc;
|
||||
dsi0_out: endpoint {
|
||||
remote-endpoint = <&panel_dsi_in>;
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
};
|
||||
@ -877,10 +810,10 @@
|
||||
};
|
||||
|
||||
&pwm {
|
||||
status = "disabled";
|
||||
status = "okay";
|
||||
u-boot,dm-pre-reloc;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pwm3_pins_d>;
|
||||
pinctrl-0 = <&pwm0_pins_d>;
|
||||
/* mode: up-count, down-count, up-down-count
|
||||
action: none, low, high, inverse */
|
||||
pwm0 {
|
||||
@ -891,7 +824,7 @@
|
||||
/* CBD, CBU, CAD, CAU, PRD, ZRO */
|
||||
aic,action0 = "none", "none", "none", "low", "none", "high";
|
||||
aic,action1 = "none", "none", "none", "high", "none", "low";
|
||||
status = "disabled";
|
||||
status = "okay";
|
||||
u-boot,dm-pre-reloc;
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user