1.ѡƽ̨
ƽ̨ǱѡĿƽ̨ѡӦѡ sf_user.h  SF_PLATFORM_SEL ֮Android 8.0 REE  TEE һ״
REE
SF_REE_MTK             // REE MTK ƽ̨
SF_REE_QUALCOMM        // REE ͨƽ̨
SF_REE_SPREAD          // REE չѶƽ̨
SF_REE_HIKEY9600       // REE 960
SF_REE_MTK_L5_X        // REE MTK 5.x ƽ̨

TEE
SF_TEE_BEANPOD         // TEE ƽ̨
SF_TEE_TRUSTKERNEL     // TEE ƿƽ̨
SF_TEE_QSEE            // TEE ͨƽ̨
SF_TEE_TRUSTONIC       // TEE trustonic ƽ̨
SF_TEE_RONGCARD        // TEE ڿƽ̨
SF_TEE_TRUSTY          // TEE չѶƽ̨


2.ָƼѡ
ѡǱѡĬϲݣĿǷҪָƳ̼ݶڶӦѡ sf_user.h  SF_COMPATIBLE_SEL
֮
SF_COMPATIBLE_NOF           // 
SF_COMPATIBLE_NOF_BP_V2_7   // beanpod pay ISEE2.7.0 
SF_COMPATIBLE_REE           // СREEݣ SF_REE_MTKSF_REE_QUALCOMMSF_REE_SPREAD ƽ̨
SF_COMPATIBLE_BEANPOD_V1    // TEE Լ V1ʹ V1  V2  V2_7 ҪѯĿĶԹʦ
SF_COMPATIBLE_BEANPOD_V2    // TEE Լ V2ʹ V1  V2  V2_7 ҪѯĿĶԹʦ
SF_COMPATIBLE_BEANPOD_V2_7  // TEE Լ V2ʹ V1  V2  V2_7 ҪѯĿĶԹʦ
SF_COMPATIBLE_TRUSTKERNEL   // TEE ƿ
SF_COMPATIBLE_QSEE          // TEE ͨ
SF_COMPATIBLE_TRUSTY        // TEE չѶ
SF_COMPATIBLE_RONGCARD      // TEE ڿ
SF_COMPATIBLE_TRUSTONIC     // TEE trustonic 


3.ָ IC Ʒʽѡ
IC ƷʽѡǿѡΪָ֤ IC  HAL ʼʱϵ磬뱣֤ѡȷƷʽ sf_user.h 
SF_POWER_MODE_SEL ֮󣬷򿪻 ID ʧ
PWR_MODE_NOF                // ָƹ
PWR_MODE_GPIO               // GPIO ʽָƹ
PWR_MODE_REGULATOR          // regulator ʽָƹ


4.д DTS Ϣ
4.1 дָ DTS ڵ㣬 sf_user.h  COMPATIBLE_SW_FP ֮
4.2 дλжϺ͵Դ DTS Ϣ
 MTK ƽ̨д FINGER_POWER_ONFINGER_POWER_OFFFINGER_RESET_LOWFINGER_RESET_HIGH  FINGER_INT_SET  pinctl
Ϣ
ԸͨչѶƽ̨д COMPATIBLE_RESET_GPIOCOMPATIBLE_IRQ_GPIO  COMPATIBLE_PWR_GPIO  DTS Ϣ
 regulator ʽ磨3.ָ IC Ʒʽѡ ѡ PWR_MODE_REGULATOR ģд SF_VDD_NAME vdd  DTS
еϢ


5.궨뱣Ĭ


//-----------------------------------------------------------------------------------------------------------
ǹڶָ IC ݵľϣھο

һԼ V1:
Լʱsboot˶idܣͨget_t_device_idǵidֵ
ĬǴ0x02
get_t_device_idnt_smc_call.hͷļ棻

ƿ:
sf_read_sensor_idжidܣҪעǣ
Ĭʱֻܶд8ֽڣֻܶд8, 82018211id10ֽڣ
򿪴logбĬϰ82018211idΣ
Ҫ82018211ݣȸƿͨ÷ſidֽ

ǵһɼ IC ID, ͳһ reset  200 ms ֮ IDʱ TEE ǿʱ䣻

ƿݸreeݲ࣬ѡͬcsƬѡԼʱעspi_board_devsеchip_selectԼ޸ƽ̨num_chipselect

ġڲͬƽ̨Ӧenable clkĺͬⲿҪƽ̨޸ģĬmt_spi_enable_clkʹclk

塢Բͬͻdtsⲿֻвͬⲿ谴ͬͻֳ޸ģ

sbootidο룺

spispiٶΪ500k
chip_config->setuptime = 10;
chip_config->holdtime = 10;
chip_config->high_time = 120; // 120->500k
chip_config->low_time = 120;
chip_config->cs_idletime = 10;
chip_config->ulthgh_thrsh = 0;

#define VENDOR_ID_SUNWAVE 0x02

static int get_fp_sensor_id()
{
    int tlRet = 0;
    int trytimes = 0;
    unsigned char spi_buffer[64];
    unsigned char id_buffer[64];
    memset(spi_buffer, 0, sizeof(spi_buffer));
    memset(id_buffer, 0, sizeof(id_buffer));
    printf("---xinan sunwave wake_up 2017-05-04 start!--\n");

    do {
        ʱ5ms
        spi_buffer[0] = 0x60;
        spi_buffer[1] = 0x9f;
        spi_buffer[2] = 0x28;
        spi_buffer[3] = 0x02;
        spi_buffer[4] = 0x00;
        tlRet = drSpiSend(spi_buffer, id_buffer, 5, 7, &spi_chip_config, 1);
        printf("xinan get vendor_id = %02x\n", id_buffer[5]);

        if (tlRet < 0) {
            printf("%s:%d xinan for sunwave spi_write failed , tlRet = %d", __FUNCTION__, __LINE__, tlRet);
            return 0;
        }

        trytimes++;

        if (id_buffer[5] == 0x82) {
            printf("xinan entry vendor_sunwave\n");
            return VENDOR_ID_SUNWAVE;
        }
    }
    while (trytimes <= 3)
        do {
            ʱ5ms
            spi_buffer[0] = 0x60;
            spi_buffer[1] = 0x28;
            spi_buffer[2] = 0x02;
            spi_buffer[3] = 0x00;
            tlRet = drSpiSend(spi_buffer, id_buffer, 4, 6, &spi_chip_config, 1);
            printf("xinan get vendor_id = %02x\n", id_buffer[4]);

            if (tlRet < 0) {
                printf("%s:%d xinan for sunwave spi_write failed , tlRet = %d", __FUNCTION__, __LINE__, tlRet);
                return 0;
            }

            trytimes++;

            if (id_buffer[4] == 0x82) {
                printf("xinan entry vendor_sunwave\n");
                return VENDOR_ID_SUNWAVE;
            }
        }
        while (trytimes <= 3)
            ʱ100ms
            printf("---xinan sunwave wake_up start!--\n");

    spi_buffer[0] = 0x1c;
    spi_buffer[1] = 0x1c;
    spi_buffer[2] = 0x1c;
    tlRet = drSpiSend(spi_buffer, id_buffer, 3, 3, &spi_chip_config, 1);

    if (tlRet < 0) {
        printf("%s:%d xinan for sunwave spi_write failed , tlRet = %d\n", __FUNCTION__, __LINE__, tlRet);
        //return -2;
    }

    ʱ5ms
    trytimes = 0;
    printf("xinan  sunwave write cmd start!\n");

    do {
        spi_buffer[0] = 0x96;
        spi_buffer[1] = 0x69;
        spi_buffer[2] = 0x00;
        spi_buffer[3] = 0x00;
        spi_buffer[4] = 0x1e;
        spi_buffer[5] = 0x00;
        spi_buffer[6] = 0x02;
        spi_buffer[7] = 0x00;
        tlRet = drSpiSend(spi_buffer, id_buffer, 8, 10, &spi_chip_config, 1);
        printf("xinan get vendor_id = %02x, %02x\n", id_buffer[8], id_buffer[9]);
        trytimes++;

        if ((id_buffer[8] == 0xFA) || (id_buffer[9] == 0xFA)) {
            return VENDOR_ID_SUNWAVE;
        }
    }
    while (trytimes <= 3)
        return 0;
}
