1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Copyright (C) 2013 Samsung Electronics 4 * Przemyslaw Marczak <p.marczak@samsung.com> 5 */ 6 7#include <common.h> 8#include <command.h> 9#include <env.h> 10#include <libtizen.h> 11#include <asm/global_data.h> 12#include <linux/delay.h> 13#include <linux/printk.h> 14#include <samsung/misc.h> 15#include <errno.h> 16#include <version.h> 17#include <malloc.h> 18#include <memalign.h> 19#include <linux/sizes.h> 20#include <asm/arch/cpu.h> 21#include <asm/gpio.h> 22#include <linux/input.h> 23#include <dm.h> 24/* 25 * Use #ifdef to work around conflicting headers while we wait for this to be 26 * converted to driver model. 27 */ 28#ifdef CONFIG_DM_PMIC_MAX77686 29#include <power/max77686_pmic.h> 30#endif 31#ifdef CONFIG_DM_PMIC_MAX8998 32#include <power/max8998_pmic.h> 33#endif 34#ifdef CONFIG_PMIC_MAX8997 35#include <power/max8997_pmic.h> 36#endif 37#include <power/pmic.h> 38#include <mmc.h> 39 40DECLARE_GLOBAL_DATA_PTR; 41 42#ifdef CONFIG_SET_DFU_ALT_INFO 43void set_dfu_alt_info(char *interface, char *devstr) 44{ 45 size_t buf_size = CFG_SET_DFU_ALT_BUF_LEN; 46 ALLOC_CACHE_ALIGN_BUFFER(char, buf, buf_size); 47 char *alt_info = "Settings not found!"; 48 char *status = "error!\n"; 49 char *alt_setting; 50 char *alt_sep; 51 int offset = 0; 52 53 puts("DFU alt info setting: "); 54 55 alt_setting = get_dfu_alt_boot(interface, devstr); 56 if (alt_setting) { 57 env_set("dfu_alt_boot", alt_setting); 58 offset = snprintf(buf, buf_size, "%s", alt_setting); 59 } 60 61 alt_setting = get_dfu_alt_system(interface, devstr); 62 if (alt_setting) { 63 if (offset) 64 alt_sep = ";"; 65 else 66 alt_sep = ""; 67 68 offset += snprintf(buf + offset, buf_size - offset, 69 "%s%s", alt_sep, alt_setting); 70 } 71 72 if (offset) { 73 alt_info = buf; 74 status = "done\n"; 75 } 76 77 env_set("dfu_alt_info", alt_info); 78 puts(status); 79} 80#endif 81 82#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG 83void set_board_info(void) 84{ 85 char info[64]; 86 87 snprintf(info, ARRAY_SIZE(info), "%u.%u", (s5p_cpu_rev & 0xf0) >> 4, 88 s5p_cpu_rev & 0xf); 89 env_set("soc_rev", info); 90 91 snprintf(info, ARRAY_SIZE(info), "%x", s5p_cpu_id); 92 env_set("soc_id", info); 93 94#ifdef CONFIG_REVISION_TAG 95 snprintf(info, ARRAY_SIZE(info), "%x", get_board_rev()); 96 env_set("board_rev", info); 97#endif 98#ifdef CONFIG_OF_LIBFDT 99 const char *bdtype = ""; 100 const char *bdname = CONFIG_SYS_BOARD; 101 102#ifdef CONFIG_BOARD_TYPES 103 bdtype = get_board_type(); 104 if (!bdtype) 105 bdtype = ""; 106 107 sprintf(info, "%s%s", bdname, bdtype); 108 env_set("board_name", info); 109#endif 110 snprintf(info, ARRAY_SIZE(info), "%s%x-%s%s.dtb", 111 CONFIG_SYS_SOC, s5p_cpu_id, bdname, bdtype); 112 env_set("fdtfile", info); 113#endif 114} 115#endif /* CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG */ 116 117#ifdef CONFIG_CMD_BMP 118void draw_logo(void) 119{ 120 int x, y; 121 ulong addr; 122 123 addr = panel_info.logo_addr; 124 if (!addr) { 125 pr_err("There is no logo data.\n"); 126 return; 127 } 128 129 if (panel_info.vl_width >= panel_info.logo_width) { 130 x = ((panel_info.vl_width - panel_info.logo_width) >> 1); 131 x += panel_info.logo_x_offset; /* For X center align */ 132 } else { 133 x = 0; 134 printf("Warning: image width is bigger than display width\n"); 135 } 136 137 if (panel_info.vl_height >= panel_info.logo_height) { 138 y = ((panel_info.vl_height - panel_info.logo_height) >> 1); 139 y += panel_info.logo_y_offset; /* For Y center align */ 140 } else { 141 y = 0; 142 printf("Warning: image height is bigger than display height\n"); 143 } 144 145 bmp_display(addr, x, y); 146} 147#endif /* CONFIG_CMD_BMP */ 148