Skip to content

Commit ecb80dd

Browse files
author
Daz Jones
committed
hardware_self_adapt: squashed commit to add framebuffer hack for u8815
Enables the use of this kernel and the 2030 RIL (with 109808 libcm.so) on the Gingerbread bootloader. Enable for u8815 (which it actually affects) and leave disabled for u8833.
1 parent 03c7f38 commit ecb80dd

File tree

6 files changed

+66
-16
lines changed

6 files changed

+66
-16
lines changed

arch/arm/configs/u8815_defconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,7 @@ CONFIG_HUAWEI_SMEM_SLEEP_LOG=y
511511
CONFIG_HUAWEI_VIBRATOR_INTENSITY_SYSFS=y
512512
CONFIG_HUAWEI_BT_BCM43XX=y
513513
# CONFIG_HUAWEI_BT_WCN2243 is not set
514+
CONFIG_FRAMEBUF_SELF_ADAPT_HACK=y
514515

515516
#
516517
# System MMU

arch/arm/configs/u8833_defconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,7 @@ CONFIG_HUAWEI_SMEM_SLEEP_LOG=y
514514
CONFIG_HUAWEI_VIBRATOR_INTENSITY_SYSFS=y
515515
# CONFIG_HUAWEI_BT_BCM43XX is not set
516516
CONFIG_HUAWEI_BT_WCN2243=y
517+
# CONFIG_FRAMEBUF_SELF_ADAPT_HACK is not set
517518

518519
#
519520
# System MMU

arch/arm/mach-msm/Kconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2763,3 +2763,12 @@ config HUAWEI_BT_WCN2243
27632763
default n
27642764
help
27652765
Select Y to use Qualcomm's BlueZ stack. Used by WCN2243. Not used in Huawei devices.
2766+
2767+
config FRAMEBUF_SELF_ADAPT_HACK
2768+
bool "Huawei framebuffer memory hack"
2769+
depends on FRAMEBUF_SELF_ADAPT
2770+
default n
2771+
help
2772+
Select Y to add an extra 2^20 to the framebuffer memory region determined by Huawei's
2773+
bootloader if the space is too small for the framebuffer. This is useful for booting on
2774+
the Gingerbread bootloader.

arch/arm/mach-msm/hardware_self_adapt.c

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ static __u32 frame_buffer_size = 0;
2929
static __u32 frame_buffer_start = 0; /* physical start address */
3030
#endif
3131

32+
#ifdef CONFIG_FRAMEBUF_SELF_ADAPT_HACK
33+
#define BL_BUF_BLOCK 1048576
34+
static bool frame_buffer_boosted = false;
35+
#endif
36+
3237
/* cust size self adapter */
3338
static __u32 cust_buffer_size = 0;
3439
static __u32 cust_buffer_start = 0; /* physical start address */
@@ -92,8 +97,15 @@ __tagtable(ATAG_CHARGE_FLAG, parse_tag_charge_flag);
9297
#define ATAG_FRAME_BUFFER_ID 0x4d534D79
9398
int __init parse_tag_frame_buffer(const struct tag *tags)
9499
{
95-
frame_buffer_size = tags->u.mem.size;
96-
frame_buffer_start = tags->u.mem.start;
100+
frame_buffer_size = tags->u.mem.size;
101+
#ifdef CONFIG_FRAMEBUF_SELF_ADAPT_HACK
102+
if(frame_buffer_size < 6 * BL_BUF_BLOCK)
103+
{
104+
frame_buffer_size += BL_BUF_BLOCK;
105+
frame_buffer_boosted = true;
106+
}
107+
#endif
108+
frame_buffer_start = tags->u.mem.start;
97109

98110
printk(KERN_DEBUG "%s: fb addr= 0x%x, size=0x%0x\n", __func__, frame_buffer_start, frame_buffer_size);
99111
return 0;
@@ -125,9 +137,13 @@ void get_frame_buffer_mem_region(__u32 *start_addr, __u32 *size)
125137
#define ATAG_CUST_BUFFER_ID 0x4d534D7B
126138
int __init parse_tag_cust_buffer(const struct tag * tags)
127139
{
128-
cust_buffer_size = tags->u.mem.size;
129-
cust_buffer_start = tags->u.mem.start;
130-
140+
cust_buffer_size = tags->u.mem.size;
141+
cust_buffer_start = tags->u.mem.start;
142+
#ifdef CONFIG_FRAMEBUF_SELF_ADAPT_HACK
143+
if(frame_buffer_boosted)
144+
cust_buffer_start += BL_BUF_BLOCK;
145+
#endif
146+
131147
printk(KERN_DEBUG "%s: cust addr= 0x%x, size=0x%0x\n", __func__, cust_buffer_start, cust_buffer_size);
132148
return 0;
133149
}
@@ -230,6 +246,24 @@ char *get_bt_device_name(void)
230246
return bt_device_array[i].dev_name;
231247
}
232248

249+
char *get_framebuffer_boosted(void)
250+
{
251+
char *framebuffer_boosted = NULL;
252+
#ifdef CONFIG_FRAMEBUF_SELF_ADAPT_HACK
253+
if(frame_buffer_boosted)
254+
{
255+
framebuffer_boosted = "1";
256+
}
257+
else
258+
{
259+
#endif
260+
framebuffer_boosted = "0";
261+
#ifdef CONFIG_FRAMEBUF_SELF_ADAPT_HACK
262+
}
263+
#endif
264+
return framebuffer_boosted;
265+
}
266+
233267
/* modify spk mic function name */
234268
/* Add DTS property */
235269
/* add special requirement for U8951-1/-51 */

fs/proc/app_info.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -388,28 +388,30 @@ static int app_version_read_proc(char *page, char **start, off_t off,
388388
char * battery_name = NULL;
389389
char *wifi_device_name = NULL;
390390
char *bt_device_name = NULL;
391+
char *framebuffer_boosted = NULL;
391392
char audio_property[AUDIO_PROPERTY_LEN] = {0};
392393
/*print sensor info into app_info*/
393394
/* Array **_**_id must be large enough to hold both id and sub id */
394395
/* 'cause the following code would call strcat function to connect */
395396
/* sub id to array **_**_id[] */
396397
char s_board_id[BOARD_ID_LEN + BOARD_ID_SUB_VER_LEN] = {0};
397-
char sub_ver[BOARD_ID_SUB_VER_LEN] = {0};
398+
char sub_ver[BOARD_ID_SUB_VER_LEN] = {0};
398399
char hw_version_id[HW_VERSION + HW_VERSION_SUB_VER] = {0};
399400
char hw_version_sub_ver[HW_VERSION_SUB_VER] = {0};
400401
char *compass_gs_name = NULL;
401402
char *sensors_list_name = NULL;
402-
set_s_board_hw_version(s_board_id,hw_version_id);
403-
sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
404-
sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
405-
strcat(s_board_id, sub_ver);
406-
strcat(hw_version_id, hw_version_sub_ver);
407-
set_s_board_hw_version_special(hw_version_id,hw_version_sub_ver,s_board_id,sub_ver);
403+
set_s_board_hw_version(s_board_id,hw_version_id);
404+
sprintf(sub_ver, ".Ver%c", 'A'+(char)get_hw_sub_board_id());
405+
sprintf(hw_version_sub_ver, "VER.%c", 'A'+(char)get_hw_sub_board_id());
406+
strcat(s_board_id, sub_ver);
407+
strcat(hw_version_id, hw_version_sub_ver);
408+
set_s_board_hw_version_special(hw_version_id,hw_version_sub_ver,s_board_id,sub_ver);
408409
compass_gs_name=get_compass_gs_position_name();
409410
sensors_list_name = get_sensors_list_name();
410411
lcd_name = get_lcd_panel_name();
411412
wifi_device_name = get_wifi_device_name();
412413
bt_device_name = get_bt_device_name();
414+
framebuffer_boosted = get_framebuffer_boosted();
413415
get_audio_property(audio_property);
414416
touch_info = get_touch_info();
415417
if (touch_info == NULL)
@@ -438,12 +440,13 @@ static int app_version_read_proc(char *page, char **start, off_t off,
438440
"compass_gs_position:\n%s\n"
439441
"sensors_list:\n%s\n"
440442
"hw_version:\n%s\n"
441-
"wifi_chip:\n%s\n"
442-
"bt_chip:\n%s\n"
443+
"framebuffer_boosted:\n%s\n"
444+
"wifi_chip:\n%s\n"
445+
"bt_chip:\n%s\n"
443446
"audio_property:\n%s\n"
444447
"touch_info:\n%s\n"
445448
"battery_id:\n%s\n",
446-
appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id,charge_flag, compass_gs_name,sensors_list_name, hw_version_id,wifi_device_name, bt_device_name, audio_property, touch_info, battery_name);
449+
appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id,charge_flag, compass_gs_name,sensors_list_name, hw_version_id, framebuffer_boosted, wifi_device_name, bt_device_name, audio_property, touch_info, battery_name);
447450
#else
448451
len = snprintf(page, PAGE_SIZE, "APPSBOOT:\n"
449452
"%s\n"
@@ -458,10 +461,11 @@ static int app_version_read_proc(char *page, char **start, off_t off,
458461
"compass_gs_position:\n%s\n"
459462
"sensors_list:\n%s\n"
460463
"hw_version:\n%s\n"
464+
"framebuffer_boosted:\n%s\n"
461465
"audio_property:\n%s\n"
462466
"touch_info:\n%s\n"
463467
"battery_id:\n%s\n",
464-
appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id, compass_gs_name,sensors_list_name, hw_version_id,audio_property, touch_info, battery_name);
468+
appsboot_version, ker_ver, str_flash_nand_id, s_board_id, lcd_name, camera_id, ts_id, compass_gs_name,sensors_list_name, hw_version_id, framebuffer_boosted, audio_property, touch_info, battery_name);
465469
#endif
466470

467471
return proc_calc_metrics(page, start, off, count, eof, len);

include/linux/hardware_self_adapt.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ int board_support_ofn(bool * ofn_support);
395395
char *get_compass_gs_position_name(void);
396396
char *get_sensors_list_name(void);
397397
char *get_wifi_device_name(void);
398+
char *get_framebuffer_boosted(void);
398399
hw_bt_device_model get_hw_bt_device_model(void);
399400
char *get_bt_device_name(void);
400401
lcd_panel_type get_lcd_panel_type(void);

0 commit comments

Comments
 (0)