mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-31 14:28:52 +09:00
![Stefan Bosch](/assets/img/avatar_default.png)
Changes in relation to FriendlyARM's U-Boot nanopi2-v2016.01: - SPL not supported yet --> no spl-dir in arch/arm/cpu/armv7/s5p4418/. Appropriate line in Makefile removed. - cpu.c: '#include <cpu_func.h>' added. - arch/arm/cpu/armv7/s5p4418/u-boot.lds removed, is not required anylonger. - "obj-$(CONFIG_ARCH_NEXELL) += s5p-common/" added to arch/arm/cpu/armv7/Makefile since s5p-common/pwm.c is used instead of drivers/pwm/pwm-nexell.c. - s5p4418.dtsi: '#include "../../../include/generated/autoconf.h"' removed, is not necessary, error at out-of-tree building. '#ifdef CONFIG_CPU_NXP4330'-blocks (2x) removed. Some minor changes regarding mmc. 'u-boot,dm-pre-reloc' added to dp0 because of added DM_VIDEO support. - board/s5p4418/ renamed to board/friendlyarm/ - All s5p4418-boards except nanopi2 removed because there is no possibility to test the other boards. - Kconfig: Changes to have a structure like mach-bcm283x (RaspberryPi), e.g. "config ..." entries moved from/to other Kconfig. - "CONFIG_" removed from several s5p4418/nanopi2 specific defines because the appropriate values do not need to be configurable. - nanopi2/board.c: All getenv(), getenv_ulong(), setenv() and saveenv() renamed to env_get(), env_get_ulong(), env_set() and env_save(), respectively. MACH_TYPE_S5P4418 is not defined anymore, therefore appropriate code removed (not necessary for DT-kernels). - nanopi2/onewire.c: All crc8() renamed to crc8_ow() because crc8() is already defined in lib/crc8.c (with different parameters). - dts: "nexell,s5pxx18-i2c" used instead of "i2c-gpio", i2c0 and i2c1 added. gmac-, ehci- and dwc2otg-entries removed because the appropriate functionality is not supported yet. New mmc-property "mmcboost" added. s5p4418-pinctrl.dtsi: gmac-entries removed, mmc- and i2c-entries added. - '#ifdef CONFIG...' changed to 'if (IS_ENABLED(CONFIG...))' where possible (and similar). Signed-off-by: Stefan Bosch <stefan_b@posteo.net>
698 lines
11 KiB
C
698 lines
11 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Copyright (c) 2017 FriendlyARM (www.arm9.net)
|
|
*/
|
|
|
|
#include <config.h>
|
|
#include <common.h>
|
|
#include <errno.h>
|
|
#include <fdtdec.h>
|
|
#include <fdt_support.h>
|
|
#include <asm/io.h>
|
|
|
|
#include <asm/arch/nexell.h>
|
|
#include <asm/arch/display.h>
|
|
#include <asm/arch/nx_gpio.h>
|
|
|
|
#include "nxp-fb.h"
|
|
|
|
/*
|
|
* param @module_index for nx_gpio APIs and will be removed
|
|
* after support pinctrl
|
|
*/
|
|
#ifndef PAD_GPIO_A
|
|
#define PAD_GPIO_A 0
|
|
#endif
|
|
|
|
static inline void common_gpio_init(void)
|
|
{
|
|
/* PVCLK */
|
|
nx_gpio_set_fast_slew(PAD_GPIO_A, 0, 1);
|
|
}
|
|
|
|
static void s70_gpio_init(void)
|
|
{
|
|
int i;
|
|
|
|
/* PVCLK */
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, 0, 1);
|
|
|
|
/* RGB24 */
|
|
for (i = 1; i < 25; i++)
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, i, 2);
|
|
|
|
/* HS/VS/DE */
|
|
for (; i < 28; i++)
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, i, 1);
|
|
}
|
|
|
|
static void s702_gpio_init(void)
|
|
{
|
|
int i;
|
|
|
|
common_gpio_init();
|
|
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, 0, 2);
|
|
|
|
for (i = 1; i < 25; i++)
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, i, 0);
|
|
|
|
for (; i < 28; i++)
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, i, 1);
|
|
}
|
|
|
|
static void s430_gpio_init(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < 28; i++)
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, i, 1);
|
|
}
|
|
|
|
static void hd101_gpio_init(void)
|
|
{
|
|
int i;
|
|
|
|
common_gpio_init();
|
|
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, 0, 2);
|
|
|
|
for (i = 1; i < 25; i++)
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, i, 1);
|
|
|
|
nx_gpio_set_drive_strength(PAD_GPIO_A, 27, 1);
|
|
}
|
|
|
|
static void hd700_gpio_init(void)
|
|
{
|
|
hd101_gpio_init();
|
|
}
|
|
|
|
/* NXP display configs for supported LCD */
|
|
|
|
static struct nxp_lcd wxga_hd700 = {
|
|
.width = 800,
|
|
.height = 1280,
|
|
.p_width = 94,
|
|
.p_height = 151,
|
|
.bpp = 24,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 20,
|
|
.h_bp = 20,
|
|
.h_sw = 24,
|
|
.v_fp = 4,
|
|
.v_fpe = 1,
|
|
.v_bp = 4,
|
|
.v_bpe = 1,
|
|
.v_sw = 8,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 0,
|
|
.inv_vsync = 0,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = hd700_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd wvga_s70 = {
|
|
.width = 800,
|
|
.height = 480,
|
|
.p_width = 155,
|
|
.p_height = 93,
|
|
.bpp = 24,
|
|
.freq = 61,
|
|
|
|
.timing = {
|
|
.h_fp = 48,
|
|
.h_bp = 36,
|
|
.h_sw = 10,
|
|
.v_fp = 22,
|
|
.v_fpe = 1,
|
|
.v_bp = 15,
|
|
.v_bpe = 1,
|
|
.v_sw = 8,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = s70_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd wvga_s702 = {
|
|
.width = 800,
|
|
.height = 480,
|
|
.p_width = 155,
|
|
.p_height = 93,
|
|
.bpp = 24,
|
|
.freq = 61,
|
|
|
|
.timing = {
|
|
.h_fp = 44,
|
|
.h_bp = 26,
|
|
.h_sw = 20,
|
|
.v_fp = 22,
|
|
.v_fpe = 1,
|
|
.v_bp = 15,
|
|
.v_bpe = 1,
|
|
.v_sw = 8,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 1,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = s702_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd wvga_s70d = {
|
|
.width = 800,
|
|
.height = 480,
|
|
.p_width = 155,
|
|
.p_height = 93,
|
|
.bpp = 24,
|
|
.freq = 61,
|
|
|
|
.timing = {
|
|
.h_fp = 80,
|
|
.h_bp = 78,
|
|
.h_sw = 10,
|
|
.v_fp = 22,
|
|
.v_fpe = 1,
|
|
.v_bp = 24,
|
|
.v_bpe = 1,
|
|
.v_sw = 8,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = s702_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd wvga_w50 = {
|
|
.width = 800,
|
|
.height = 480,
|
|
.p_width = 108,
|
|
.p_height = 64,
|
|
.bpp = 24,
|
|
.freq = 61,
|
|
|
|
.timing = {
|
|
.h_fp = 40,
|
|
.h_bp = 40,
|
|
.h_sw = 48,
|
|
.v_fp = 20,
|
|
.v_fpe = 1,
|
|
.v_bp = 20,
|
|
.v_bpe = 1,
|
|
.v_sw = 12,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = s70_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd wvga_s430 = {
|
|
.width = 480,
|
|
.height = 800,
|
|
.p_width = 108,
|
|
.p_height = 64,
|
|
.bpp = 24,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 64,
|
|
.h_bp = 0,
|
|
.h_sw = 16,
|
|
.v_fp = 32,
|
|
.v_fpe = 1,
|
|
.v_bp = 0,
|
|
.v_bpe = 1,
|
|
.v_sw = 16,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 1,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = s430_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd wsvga_w101 = {
|
|
.width = 1024,
|
|
.height = 600,
|
|
.p_width = 204,
|
|
.p_height = 120,
|
|
.bpp = 24,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 40,
|
|
.h_bp = 40,
|
|
.h_sw = 200,
|
|
.v_fp = 8,
|
|
.v_fpe = 1,
|
|
.v_bp = 8,
|
|
.v_bpe = 1,
|
|
.v_sw = 16,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 1,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct nxp_lcd wsvga_x710 = {
|
|
.width = 1024,
|
|
.height = 600,
|
|
.p_width = 154,
|
|
.p_height = 90,
|
|
.bpp = 24,
|
|
.freq = 61,
|
|
|
|
.timing = {
|
|
.h_fp = 84,
|
|
.h_bp = 84,
|
|
.h_sw = 88,
|
|
.v_fp = 10,
|
|
.v_fpe = 1,
|
|
.v_bp = 10,
|
|
.v_bpe = 1,
|
|
.v_sw = 20,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = hd101_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd xga_a97 = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.p_width = 200,
|
|
.p_height = 150,
|
|
.bpp = 24,
|
|
.freq = 61,
|
|
|
|
.timing = {
|
|
.h_fp = 12,
|
|
.h_bp = 12,
|
|
.h_sw = 4,
|
|
.v_fp = 8,
|
|
.v_fpe = 1,
|
|
.v_bp = 8,
|
|
.v_bpe = 1,
|
|
.v_sw = 4,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct nxp_lcd xga_lq150 = {
|
|
.width = 1024,
|
|
.height = 768,
|
|
.p_width = 304,
|
|
.p_height = 228,
|
|
.bpp = 24,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 12,
|
|
.h_bp = 12,
|
|
.h_sw = 40,
|
|
.v_fp = 8,
|
|
.v_fpe = 1,
|
|
.v_bp = 8,
|
|
.v_bpe = 1,
|
|
.v_sw = 40,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct nxp_lcd vga_l80 = {
|
|
.width = 640,
|
|
.height = 480,
|
|
.p_width = 160,
|
|
.p_height = 120,
|
|
.bpp = 32,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 35,
|
|
.h_bp = 53,
|
|
.h_sw = 73,
|
|
.v_fp = 3,
|
|
.v_fpe = 1,
|
|
.v_bp = 29,
|
|
.v_bpe = 1,
|
|
.v_sw = 6,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct nxp_lcd wxga_bp101 = {
|
|
.width = 1280,
|
|
.height = 800,
|
|
.p_width = 218,
|
|
.p_height = 136,
|
|
.bpp = 24,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 20,
|
|
.h_bp = 20,
|
|
.h_sw = 24,
|
|
.v_fp = 4,
|
|
.v_fpe = 1,
|
|
.v_bp = 4,
|
|
.v_bpe = 1,
|
|
.v_sw = 8,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 1,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct nxp_lcd wxga_hd101 = {
|
|
.width = 1280,
|
|
.height = 800,
|
|
.p_width = 218,
|
|
.p_height = 136,
|
|
.bpp = 24,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 16,
|
|
.h_bp = 16,
|
|
.h_sw = 30,
|
|
.v_fp = 8,
|
|
.v_fpe = 1,
|
|
.v_bp = 8,
|
|
.v_bpe = 1,
|
|
.v_sw = 12,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 1,
|
|
.inv_hsync = 0,
|
|
.inv_vsync = 0,
|
|
.inv_vden = 0,
|
|
},
|
|
.gpio_init = hd101_gpio_init,
|
|
};
|
|
|
|
static struct nxp_lcd hvga_h43 = {
|
|
.width = 480,
|
|
.height = 272,
|
|
.p_width = 96,
|
|
.p_height = 54,
|
|
.bpp = 32,
|
|
.freq = 65,
|
|
|
|
.timing = {
|
|
.h_fp = 5,
|
|
.h_bp = 40,
|
|
.h_sw = 2,
|
|
.v_fp = 8,
|
|
.v_fpe = 1,
|
|
.v_bp = 8,
|
|
.v_bpe = 1,
|
|
.v_sw = 2,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct nxp_lcd hvga_p43 = {
|
|
.width = 480,
|
|
.height = 272,
|
|
.p_width = 96,
|
|
.p_height = 54,
|
|
.bpp = 32,
|
|
.freq = 65,
|
|
|
|
.timing = {
|
|
.h_fp = 5,
|
|
.h_bp = 40,
|
|
.h_sw = 2,
|
|
.v_fp = 8,
|
|
.v_fpe = 1,
|
|
.v_bp = 9,
|
|
.v_bpe = 1,
|
|
.v_sw = 2,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 1,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct nxp_lcd qvga_w35 = {
|
|
.width = 320,
|
|
.height = 240,
|
|
.p_width = 70,
|
|
.p_height = 52,
|
|
.bpp = 16,
|
|
.freq = 65,
|
|
|
|
.timing = {
|
|
.h_fp = 4,
|
|
.h_bp = 70,
|
|
.h_sw = 4,
|
|
.v_fp = 4,
|
|
.v_fpe = 1,
|
|
.v_bp = 12,
|
|
.v_bpe = 1,
|
|
.v_sw = 4,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 1,
|
|
.inv_hsync = 0,
|
|
.inv_vsync = 0,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
/* HDMI */
|
|
static struct nxp_lcd hdmi_def = {
|
|
.width = 1920,
|
|
.height = 1080,
|
|
.p_width = 480,
|
|
.p_height = 320,
|
|
.bpp = 24,
|
|
.freq = 60,
|
|
|
|
.timing = {
|
|
.h_fp = 12,
|
|
.h_bp = 12,
|
|
.h_sw = 4,
|
|
.v_fp = 8,
|
|
.v_fpe = 1,
|
|
.v_bp = 8,
|
|
.v_bpe = 1,
|
|
.v_sw = 4,
|
|
},
|
|
.polarity = {
|
|
.rise_vclk = 0,
|
|
.inv_hsync = 1,
|
|
.inv_vsync = 1,
|
|
.inv_vden = 0,
|
|
},
|
|
};
|
|
|
|
static struct hdmi_config {
|
|
char *name;
|
|
int width;
|
|
int height;
|
|
} bd_hdmi_config[] = {
|
|
{ "HDMI1080P60", 1920, 1080 },
|
|
{ "HDMI1080I60", 1920, 1080 },
|
|
{ "HDMI1080P30", 1920, 1080 },
|
|
{ "HDMI1080P50", 1920, 1080 },
|
|
{ "HDMI1080I50", 1920, 1080 },
|
|
|
|
{ "HDMI1080P60D", 960, 536 },
|
|
{ "HDMI1080I60D", 960, 536 },
|
|
{ "HDMI1080P30D", 960, 536 },
|
|
{ "HDMI1080P50D", 960, 536 },
|
|
{ "HDMI1080I50D", 960, 536 },
|
|
|
|
{ "HDMI720P60", 1280, 720 },
|
|
{ "HDMI720P60D", 640, 360 },
|
|
{ "HDMI720P50", 1280, 720 },
|
|
{ "HDMI720P50D", 640, 360 },
|
|
|
|
{ "HDMI576P16X9", 720, 576 },
|
|
{ "HDMI576P16X9D", 720, 576 },
|
|
{ "HDMI576P4X3", 720, 576 },
|
|
{ "HDMI576P4X3D", 720, 576 },
|
|
|
|
{ "HDMI480P16X9", 720, 480 },
|
|
{ "HDMI480P16X9D", 720, 480 },
|
|
{ "HDMI480P4X3", 720, 480 },
|
|
{ "HDMI480P4X3D", 720, 480 },
|
|
};
|
|
|
|
/* Try to guess LCD panel by kernel command line, or
|
|
* using *HD101* as default
|
|
*/
|
|
static struct {
|
|
int id;
|
|
char *name;
|
|
struct nxp_lcd *lcd;
|
|
int dpi;
|
|
int ctp;
|
|
enum lcd_format fmt;
|
|
} bd_lcd_config[] = {
|
|
{ 25, "HD101", &wxga_hd101, 0, 1, LCD_RGB },
|
|
{ 32, "HD101B", &wxga_hd101, 0, 1, LCD_RGB },
|
|
{ 18, "HD700", &wxga_hd700, 213, 1, LCD_RGB },
|
|
{ 30, "HD702", &wxga_hd700, 213, 1, LCD_RGB },
|
|
{ 33, "H70", &wxga_hd700, 213, 0, LCD_VESA },
|
|
{ 3, "S70", &wvga_s70, 128, 1, LCD_RGB },
|
|
{ 36, "S701", &wvga_s70, 128, 1, LCD_RGB },
|
|
{ 24, "S702", &wvga_s702, 128, 3, LCD_RGB },
|
|
{ 26, "S70D", &wvga_s70d, 128, 0, LCD_RGB },
|
|
{ 14, "H43", &hvga_h43, 0, 0, LCD_RGB },
|
|
{ 19, "P43", &hvga_p43, 0, 0, LCD_RGB },
|
|
{ 8, "W35", &qvga_w35, 0, 0, LCD_RGB },
|
|
{ 28, "X710", &wsvga_x710, 0, 1, LCD_RGB },
|
|
{ 31, "S430", &wvga_s430, 180, 1, LCD_RGB },
|
|
{ 4, "W50", &wvga_w50, 0, 0, LCD_RGB },
|
|
|
|
/* TODO: Testing */
|
|
{ 15, "W101", &wsvga_w101, 0, 1, LCD_RGB },
|
|
{ 5, "L80", &vga_l80, 0, 1, LCD_RGB },
|
|
{ -1, "A97", &xga_a97, 0, 0, LCD_RGB },
|
|
{ -1, "LQ150", &xga_lq150, 0, 1, LCD_RGB },
|
|
{ -1, "BP101", &wxga_bp101, 0, 1, LCD_RGB },
|
|
/* Pls keep it at last */
|
|
{ 128, "HDMI", &hdmi_def, 0, 0, LCD_HDMI },
|
|
};
|
|
|
|
static int lcd_idx;
|
|
|
|
int bd_setup_lcd_by_id(int id)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(bd_lcd_config); i++) {
|
|
if (bd_lcd_config[i].id == id) {
|
|
lcd_idx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (i >= ARRAY_SIZE(bd_lcd_config)) {
|
|
/* NOT found */
|
|
return -19;
|
|
}
|
|
|
|
return bd_lcd_config[i].id;
|
|
}
|
|
|
|
int bd_setup_lcd_by_name(char *str)
|
|
{
|
|
char *delim;
|
|
int i;
|
|
|
|
delim = strchr(str, ',');
|
|
if (delim)
|
|
*delim++ = '\0';
|
|
|
|
if (!strncasecmp("HDMI", str, 4)) {
|
|
struct hdmi_config *cfg = &bd_hdmi_config[0];
|
|
struct nxp_lcd *lcd;
|
|
|
|
lcd_idx = ARRAY_SIZE(bd_lcd_config) - 1;
|
|
lcd = bd_lcd_config[lcd_idx].lcd;
|
|
|
|
for (i = 0; i < ARRAY_SIZE(bd_hdmi_config); i++, cfg++) {
|
|
if (!strcasecmp(cfg->name, str)) {
|
|
lcd->width = cfg->width;
|
|
lcd->height = cfg->height;
|
|
bd_lcd_config[lcd_idx].name = cfg->name;
|
|
goto __ret;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < ARRAY_SIZE(bd_lcd_config); i++) {
|
|
if (!strcasecmp(bd_lcd_config[i].name, str)) {
|
|
lcd_idx = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
__ret:
|
|
return 0;
|
|
}
|
|
|
|
struct nxp_lcd *bd_get_lcd(void)
|
|
{
|
|
return bd_lcd_config[lcd_idx].lcd;
|
|
}
|
|
|
|
const char *bd_get_lcd_name(void)
|
|
{
|
|
return bd_lcd_config[lcd_idx].name;
|
|
}
|
|
|
|
enum lcd_format bd_get_lcd_format(void)
|
|
{
|
|
return bd_lcd_config[lcd_idx].fmt;
|
|
}
|
|
|
|
int bd_get_lcd_density(void)
|
|
{
|
|
return bd_lcd_config[lcd_idx].dpi;
|
|
}
|
|
|
|
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
|
int bd_fixup_lcd_fdt(void *blob, struct nxp_lcd *lcd)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|