cancel
Showing results for 
Search instead for 
Did you mean: 

Whos doing Galaxy S4 eDP hack?

Cgpnz
Level 2
Well I have finally ordered a S4 replacement screen and a few test cables (has the connector/cable).

www.etradesupply.com

it was usd 230, at least twice the expected price, but thats secondary parts market for you.
I will get a display port splitter (one that does stream split and not just mirroring.): first
for the two eyes and second hopefully for some electronic shorting separation from an expensive
display port source.

My main reason for the topic is to ask if anyone else has done this and what problems were encountered.

I have worn out my google eyes looking for eDP hacks: there is but one lonely 10" iPad retina example.

Surely the awesomeness of this endeavor would cause more hackster outcomes.
46 REPLIES 46

Inscothen
Level 3
if the S4's panel has a tiny driver ic in there somewhere then it should be straightforward after finding out the signal and power traces. Does the iPad retina LCD have any timing ic or eDP receivers on the panel?

I was looking at one of the S4 panels and saw "AMS499QP01". Do you think that might be a ic model number like a driver ic or timing ic? Maybe it's in the housing.

I also found this https://github.com/gokulnatha/GT-I9505/blob/master/drivers/video/msm/mipi_magna_octa_video_full_hd_p... which may indicate something. It has

    #include "mipi_dsi.h"
    #include "mipi_samsung_octa.h"

    static struct mipi_panel_data mipi_pd = {
    .panel_name = "AMS499QP01-0\n",
    .on = {magna_on_cmds_revB
    , ARRAY_SIZE(magna_on_cmds_revB)},
    .off = {panel_off_cmds
    , ARRAY_SIZE(panel_off_cmds)},
    .late_on = {panel_late_on_cmds
    , ARRAY_SIZE(panel_late_on_cmds)},
    .early_off = {panel_early_off_cmds
    , ARRAY_SIZE(panel_early_off_cmds)},

    .brightness = {brightness_packet
    , ARRAY_SIZE(brightness_packet)},
    .backlight_control = brightness_control,


...in the code.

Cgpnz
Level 2

Inscothen
Level 3
I don't know about it yet, we need more info. In that link I posted there is also this though which is VERY specific in display specs/timings etc... which will be needed later regardless of panel interface:

    #ifdef CONFIG_FB_MSM_MIPI_PANEL_DETECT
    if (msm_fb_detect_client("mipi_cmd_magna_oled_qhd"))
    return 0;
    #endif
    pinfo.xres = 1080;
    pinfo.yres = 1920;
    pinfo.height = 111;
    pinfo.width = 62;

    pinfo.type = MIPI_VIDEO_PANEL;
    pinfo.pdest = DISPLAY_1;
    pinfo.wait_cycle = 0;
    pinfo.bpp = 24;

    pinfo.lcdc.h_back_porch = 50; // hbp + hpw = 400ns
    pinfo.lcdc.h_front_porch = 145;
    pinfo.lcdc.h_pulse_width = 10;

    pinfo.lcdc.v_back_porch = 4;
    pinfo.lcdc.v_front_porch = 10;
    pinfo.lcdc.v_pulse_width = 2;

    pinfo.lcdc.border_clr = 0; /* blk */
    pinfo.lcdc.underflow_clr = 0xff; /* blue */
    pinfo.lcdc.hsync_skew = 0;

    pinfo.bl_max = 255;
    pinfo.bl_min = 1;
    pinfo.fb_num = 2;

    pinfo.clk_rate = 898000000;

    pinfo.mipi.mode = DSI_VIDEO_MODE;
    pinfo.mipi.pulse_mode_hsa_he = FALSE;
    pinfo.mipi.hfp_power_stop = TRUE;
    pinfo.mipi.hbp_power_stop = FALSE;
    pinfo.mipi.hsa_power_stop = FALSE;
    pinfo.mipi.eof_bllp_power_stop = TRUE;
    pinfo.mipi.bllp_power_stop = TRUE;
    pinfo.mipi.traffic_mode = DSI_BURST_MODE;
    pinfo.mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
    pinfo.mipi.vc = 0;
    pinfo.mipi.rgb_swap = DSI_RGB_SWAP_RGB;
    pinfo.mipi.data_lane0 = TRUE;
    pinfo.mipi.data_lane1 = TRUE;
    pinfo.mipi.data_lane2 = TRUE;
    pinfo.mipi.data_lane3 = TRUE;
    pinfo.mipi.t_clk_post = 0x04;
    pinfo.mipi.t_clk_pre = 0x1c;
    pinfo.mipi.stream = 0; /* dma_p */
    pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
    pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
    pinfo.mipi.frame_rate = 60;
    pinfo.mipi.dsi_phy_db = &dsi_video_mode_phy_db;
    pinfo.mipi.force_clk_lane_hs = 1;
    pinfo.mipi.esc_byte_ratio = 2;
    pinfo.lcd.blt_ctrl = 1; //OVERLAY_BLT_SWITCH_TG_OFF;

    ret = mipi_samsung_octa_device_register(&pinfo, MIPI_DSI_PRIM,
    MIPI_DSI_PANEL_FULL_HD_PT,
    &mipi_pd);
    if (ret)
    pr_err("%s: failed to register device!\n", __func__);

    printk(KERN_DEBUG "%s: get_lcd_attached(%d)!\n",
    __func__, get_lcd_attached());
    if (get_lcd_attached() == 0)
    return -ENODEV;

    printk(KERN_DEBUG "[lcd] mipi_video_magna_octa_full_hd_pt_init end\n");

    return ret;
    }
    module_init(mipi_video_magna_octa_full_hd_pt_init);


They call it the "magna oled" so maybe look for something like that to find more info on the display panel.

EDIT: This is probably what "Magna_oled_qHD" refers to http://news.efytimes.com/e1/70951/Samsung-Smartphone-To-Use-Magna-Display-Chip

I searched Magnachips' site and under mobile display I found driver ic basic info http://www.magnachip.com/product/mobile.php

Cgpnz
Level 2
Your post nailing ams499qp01 to mipi likely does it. That dp stuff is for bigger 2k stuff.

Cgpnz
Level 2
I've tried direct samsung contact.
Got a one liner saying 'per HQ, under strict quidelines we are not allowed to share info'
They are protecting their IP.

Inscothen
Level 3
Ok so then we need a HDMI-MIPI circuit.

On mtbs3d and this forum there was talk of two potential circuit makers. rozsnyo(ipad edp hack circuit builder) and chalkboard-electronics. There's also the possibility of an independent designer. OzOnE2k on mtbs3d did a design I haven't checked out and for all I know It may be almost done.

I really think a universal circuit(that we could attach different display cables to in case the pinouts are different) would be best so we can use different panels instead of designing for just one panel. That way we can use later 1080p displays of different makers and sizes. If all cables are the same connector and pinout then that would be amazing, but I don't know.

EDIT: ok so i looked at different 1080p mobile display panels' cables/connectors and they're different so a universal connector will need a custom cable for each display.

Cgpnz
Level 2
I am moving my posting on this topic to oculus development: topic: a mipi interface