Ejemplo n.º 1
0
static int diag_er_leds_cmd_ctl(unsigned char red_f,
                                unsigned char grn_f,
                                unsigned char ble_f)
{
    int ret = LEDS_CMD_RET_OK;
    unsigned char ret_val;

    ret_val = leds_cmd(LEDS_CMD_TYPE_ER_RGB_RED, red_f);
    if (ret_val != LEDS_CMD_RET_OK)
    {
        ret = LEDS_CMD_RET_NG;
    }
    ret_val = leds_cmd(LEDS_CMD_TYPE_ER_RGB_GREEN, grn_f);
    if (ret_val != LEDS_CMD_RET_OK)
    {
        ret = LEDS_CMD_RET_NG;
    }
    ret_val = leds_cmd(LEDS_CMD_TYPE_ER_RGB_BLUE, ble_f);
    if (ret_val != LEDS_CMD_RET_OK)
    {
        ret = LEDS_CMD_RET_NG;
    }

    return ret;
}
Ejemplo n.º 2
0
static long led_diag_wrapper_ioctl(struct file *file, unsigned int iocmd, unsigned long data)




{
    int ret = LED_DIAG_IOCTL_OK;
    int led_ret = LEDS_CMD_RET_OK;
    int err;
    unsigned char *pkt_params = NULL;
#if !defined(LOCAL_CONFIG_FEATURE_DVE021_DVE902)
    unsigned char read_data = 0;
#endif

    struct led_request_rgb key_request;
    union u_led_isc_reg led_key_bright1, led_key_bright2, led_key_bright3;


    size_t res_size = sizeof(char);
    size_t req_size = sizeof(char);

    struct adp8861_3color_led_parame_nv  adp8861_3color_led_parame_nv;
    memset( &adp8861_3color_led_parame_nv, 0, sizeof(  struct adp8861_3color_led_parame_nv ));
    adp8861_get_3color_nv(&adp8861_3color_led_parame_nv);


    printk(KERN_DEBUG "[diag_wrapper]%s: ioctl Enter (iocmd:0x%02X)\n", __func__,iocmd);

    switch(iocmd) {
    case LED_DIAG_IOCTL_01:

        led_ret = diag_leds_cmd_ctl(adp8861_3color_led_parame_nv.illu_red_lumin.one, 0, 0);



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_02:

        led_ret = diag_leds_cmd_ctl(0, adp8861_3color_led_parame_nv.illu_green_lumin.one, 0);



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_03:

        led_ret = diag_leds_cmd_ctl(0, 0, adp8861_3color_led_parame_nv.illu_blue_lumin.one);



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_04:

        led_ret = diag_leds_cmd_ctl(adp8861_3color_led_parame_nv.illu_red_lumin.two, adp8861_3color_led_parame_nv.illu_green_lumin.two, 0);



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_05:

        led_ret = diag_leds_cmd_ctl(adp8861_3color_led_parame_nv.illu_red_lumin.two, 0, adp8861_3color_led_parame_nv.illu_blue_lumin.two);



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_06:

        led_ret = diag_leds_cmd_ctl(0, adp8861_3color_led_parame_nv.illu_green_lumin.two, adp8861_3color_led_parame_nv.illu_blue_lumin.two);



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_07:

        led_ret = diag_leds_cmd_ctl(adp8861_3color_led_parame_nv.illu_red_lumin.three, adp8861_3color_led_parame_nv.illu_green_lumin.three, adp8861_3color_led_parame_nv.illu_blue_lumin.three);



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_08:
        led_ret = diag_leds_cmd_ctl(0, 0, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

#if !defined(LOCAL_CONFIG_FEATURE_DVE021_DVE902)
    case LED_DIAG_IOCTL_09:
        led_ret= leds_cmd(LEDS_CMD_TYPE_KEY, LEDS_LED_KEYBL1);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_10:
        led_ret = leds_cmd(LEDS_CMD_TYPE_KEY, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;
#endif

#if defined(LED_DIAG_DEBUG_PLUS)
    case LED_DIAG_IOCTL_14:
        led_ret = leds_cmd(LEDS_CMD_TYPE_FLASH_STILL, LEDS_SND_CAM_FLASH_LED1);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_15:
        led_ret = leds_cmd(LEDS_CMD_TYPE_FLASH_MOVIE, LEDS_SND_CAM_FLASH_LED2);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_16:
        led_ret = leds_cmd(LEDS_CMD_TYPE_FLASH_TORCH, LEDS_SND_CAM_FLASH_LED3);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_17:
        led_ret = leds_cmd(LEDS_CMD_TYPE_FLASH, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_18:
        led_ret = leds_cmd(LEDS_CMD_TYPE_PREVENT_PEEPING, LEDS_LED_CAM_IND);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_19:
        led_ret = leds_cmd(LEDS_CMD_TYPE_PREVENT_PEEPING, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;
#endif


#if !defined(LOCAL_CONFIG_FEATURE_DVE021_DVE902)
    case LED_DIAG_IOCTL_12:



        led_ret = lm3537_main_lcd_don( LM3537_LED_ON );

        if( led_ret < 0 ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;
#endif

#if !defined(LOCAL_CONFIG_FEATURE_DVE021_DVE902)
    case LED_DIAG_IOCTL_13:



        led_ret = lm3537_main_lcd_don( LM3537_LED_OFF );

        if( led_ret < 0 ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_46:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params )
            return -ENOMEM;

        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return LED_DIAG_IOCTL_NG;
        }









        ret = lm3537_i2c_smbus_write(0xA0, pkt_params[0]);

        ret |= lm3537_i2c_smbus_write( 0x10, 0xFF );
        ret |= lm3537_i2c_smbus_write( 0x00, 0x04 );
        if( ret != LM3537_LED_SET_OK )
            ret = LED_DIAG_IOCTL_NG;

        break;
#endif

#if !defined(LOCAL_CONFIG_FEATURE_DVE021_DVE902)
    case LED_DIAG_IOCTL_30:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params ) {
            return -ENOMEM;
        }
        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return LED_DIAG_IOCTL_NG;
        }



        ret = lm3537_i2c_smbus_write(pkt_params[0], pkt_params[1]);

        break;

    case LED_DIAG_IOCTL_31:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params ) {
            return -ENOMEM;
        }
        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return LED_DIAG_IOCTL_NG;
        }

        if(pkt_params[0] != 0x00) {



            ret = lm3537_i2c_smbus_read(pkt_params[0], &read_data);

        }
        pkt_params[1] = read_data;
        break;
#endif

    case LED_DIAG_IOCTL_32:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params ) {
            return -ENOMEM;
        }
        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return LED_DIAG_IOCTL_NG;
        }

        ret = adp8861_reg_write(pkt_params[0], pkt_params[1], ID_0);



        break;

    case LED_DIAG_IOCTL_33:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params ) {
            return -ENOMEM;
        }
        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return LED_DIAG_IOCTL_NG;
        }

        ret = adp8861_i2c_smbus_read(pkt_params[0], &pkt_params[1], ID_0);



        break;

    case LED_DIAG_IOCTL_47:
        led_ret= leds_cmd(LEDS_CMD_TYPE_PREVENT_PEEPING, LEDS_LED_CAM_IND);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_48:
        led_ret = leds_cmd(LEDS_CMD_TYPE_PREVENT_PEEPING, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_49:
        led_ret = leds_cmd(LEDS_CMD_TYPE_FLASH_MOVIE, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_50:
        led_ret = leds_cmd(LEDS_CMD_TYPE_FLASH_MOVIE, LEDS_SND_CAM_FLASH_LED2);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_51:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params ) {
            return -ENOMEM;
        }
        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return LED_DIAG_IOCTL_NG;
        }
        ret = adp8861_reg_write(pkt_params[0], pkt_params[1], ID_1);
        break;

    case LED_DIAG_IOCTL_52:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params ) {
            return -ENOMEM;
        }
        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return LED_DIAG_IOCTL_NG;
        }
        ret = adp8861_i2c_smbus_read(pkt_params[0], &pkt_params[1], ID_1);
        break;

    case LED_DIAG_IOCTL_53:
        led_ret = diag_er_leds_cmd_ctl(adp8861_3color_led_parame_nv.hsj_red_lumin.one, 0, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_54:
        led_ret = diag_er_leds_cmd_ctl(0, adp8861_3color_led_parame_nv.hsj_green_lumin.one, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_55:
        led_ret = diag_er_leds_cmd_ctl(0, 0, adp8861_3color_led_parame_nv.hsj_blue_lumin.one);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_56:
        led_ret = diag_er_leds_cmd_ctl(adp8861_3color_led_parame_nv.hsj_red_lumin.two, adp8861_3color_led_parame_nv.hsj_green_lumin.two, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_57:
        led_ret = diag_er_leds_cmd_ctl(adp8861_3color_led_parame_nv.hsj_red_lumin.two, 0, adp8861_3color_led_parame_nv.hsj_blue_lumin.two);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_58:
        led_ret = diag_er_leds_cmd_ctl(0, adp8861_3color_led_parame_nv.hsj_green_lumin.two, adp8861_3color_led_parame_nv.hsj_blue_lumin.two);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_59:
        led_ret = diag_er_leds_cmd_ctl(adp8861_3color_led_parame_nv.hsj_red_lumin.three, adp8861_3color_led_parame_nv.hsj_green_lumin.three, adp8861_3color_led_parame_nv.hsj_blue_lumin.three);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_60:
        led_ret = diag_er_leds_cmd_ctl(0, 0, 0);
        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;



    case LED_DIAG_IOCTL_90:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;

        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl1_red_lumin.one;



        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;
        led_key_bright2.st2.scd = 0x00;
        led_key_bright3.us = 0;
        led_key_bright3.st2.set_flag = 1;
        led_key_bright3.st2.scd = 0x00;

        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl2_red_lumin.one;
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 1;
        key_request.set_g = 0;
        key_request.set_b = 0;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_91:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;
        led_key_bright1.st2.scd = 0x00;
        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;

        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl1_green_lumin.one;



        led_key_bright3.us = 0;
        led_key_bright3.st2.set_flag = 1;
        led_key_bright3.st2.scd = 0x00;

        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl2_green_lumin.one;
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 0;
        key_request.set_g = 1;
        key_request.set_b = 0;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_92:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;
        led_key_bright1.st2.scd = 0x00;
        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;
        led_key_bright2.st2.scd = 0x00;
        led_key_bright3.us = 0;
        led_key_bright3.st2.set_flag = 1;

        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl1_blue_lumin.one;




        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl2_blue_lumin.one;
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 0;
        key_request.set_g = 0;
        key_request.set_b = 1;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_93:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;

        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl1_red_lumin.two;
        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;
        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl1_green_lumin.two;
        led_key_bright3.us = 0;







        led_key_bright3.st2.set_flag = 1;
        led_key_bright3.st2.scd = 0x00;

        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl2_red_lumin.two;
        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl2_green_lumin.two;
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 1;
        key_request.set_g = 1;
        key_request.set_b = 0;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_94:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;

        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl1_red_lumin.two;



        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;
        led_key_bright2.st2.scd = 0x00;
        led_key_bright3.us = 0;
        led_key_bright3.st2.set_flag = 1;

        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl1_blue_lumin.two;




        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl2_red_lumin.two;
        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl2_blue_lumin.two;
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 1;
        key_request.set_g = 0;
        key_request.set_b = 1;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_95:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;
        led_key_bright1.st2.scd = 0x00;
        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;

        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl1_green_lumin.two;



        led_key_bright3.us = 0;
        led_key_bright3.st2.set_flag = 1;

        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl1_blue_lumin.two;




        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl2_green_lumin.two;
        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl2_blue_lumin.two;
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 0;
        key_request.set_g = 1;
        key_request.set_b = 1;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_96:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;

        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl1_red_lumin.three;



        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;

        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl1_green_lumin.three;



        led_key_bright3.us = 0;
        led_key_bright3.st2.set_flag = 1;

        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl1_blue_lumin.three;




        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_key_bright1.st2.scd = adp8861_3color_led_parame_nv.keybl2_red_lumin.three;
        led_key_bright2.st2.scd = adp8861_3color_led_parame_nv.keybl2_green_lumin.three;
        led_key_bright3.st2.scd = adp8861_3color_led_parame_nv.keybl2_blue_lumin.three;
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 1;
        key_request.set_g = 1;
        key_request.set_b = 1;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;

    case LED_DIAG_IOCTL_97:
        led_key_bright1.us = 0;
        led_key_bright1.st2.set_flag = 1;
        led_key_bright1.st2.scd = 0x00;
        led_key_bright2.us = 0;
        led_key_bright2.st2.set_flag = 1;
        led_key_bright2.st2.scd = 0x00;
        led_key_bright3.us = 0;
        led_key_bright3.st2.set_flag = 1;
        led_key_bright3.st2.scd = 0x00;

        led_ret  = adp8861_right_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );
        led_ret |= adp8861_left_key_led_bright( &led_key_bright1, &led_key_bright2, &led_key_bright3 );



        key_request.dmy1  = 0;
        key_request.set_r = 0;
        key_request.set_g = 0;
        key_request.set_b = 0;

        led_ret |= adp8861_right_key_led_set( &key_request );
        led_ret |= adp8861_left_key_led_set( &key_request );



        if( led_ret != LEDS_CMD_RET_OK ) {
            ret = LED_DIAG_IOCTL_NG;
        }
        break;


    default:
        ret = LED_DIAG_IOCTL_NG;
        break;
    }

    if(pkt_params) {
        err = copy_to_user((unsigned char *)data, pkt_params, res_size);
        if (err) {
            ret = -1;
        }
        kfree(pkt_params);
    }
    printk(KERN_DEBUG "[diag_wrapper]%s: ioctl Exit\n", __func__);
    return ret;
}
Ejemplo n.º 3
0
static int diag_wrapper_ioctl(struct inode *inode, struct file *file,
    unsigned int iocmd, unsigned long data)
{
    int ret = DIAG_WRAPPER_IOCTL_OK;
    unsigned char ret_val;
    int err;
    long    timeout;
    unsigned char *pkt_params = NULL;
    int *key_val = NULL;
    int key_mask;
    size_t res_size = sizeof(char);
    size_t req_size = sizeof(char);
    
    init_waitqueue_head(&key_rand_wait);
    init_waitqueue_head(&touch_cmd_wait);

    printk(KERN_DEBUG "[diag_wrapper]%s: ioctl Enter (iocmd:0x%02X)\n", __func__,iocmd);

    switch(iocmd){
    case DIAG_WRAPPER_IOCTL_A01:
        ret_val = keypad_cmd_callback(KEYPAD_CMD_TYPE_GET_KEYCODE, 0, diag_keypad_cmd_rand_ctl);
        if (ret_val != 1)
        {
            ret = 0;
        }
        else
        {
            g_rsp_key_data = 0xff;
            timeout = wait_event_timeout(key_rand_wait, g_rsp_key_data != 0xff, KEY_TIMEOUT);
            if(timeout == 0)
            {
                g_rsp_key_data = 0x00;
                key_mask = 0;
                keypad_cmd(KEYPAD_CMD_TYPE_MASK, &key_mask);
            }
            ret = g_rsp_key_data;
        }
        break;

    case DIAG_WRAPPER_IOCTL_A02:
        key_mask = 1;
        ret = keypad_cmd(KEYPAD_CMD_TYPE_MASK, &key_mask);
        break;

    case DIAG_WRAPPER_IOCTL_A03:
        key_mask = 0;
        ret = keypad_cmd(KEYPAD_CMD_TYPE_MASK, &key_mask);
        break;

    case DIAG_WRAPPER_IOCTL_A04:
        req_size = ( sizeof(int) * 4 );
        key_val = (int*)kmalloc(req_size, GFP_KERNEL);
        if(!key_val)
            return -ENOMEM;

        err = copy_from_user( key_val, (int *)data, req_size );
        if (err) {
            kfree(key_val);
            return DIAG_WRAPPER_IOCTL_NG;
        }
        
        if( key_val[3] == KEY_DIAG_EMULATION_KEY )
            ret = keypad_cmd(KEYPAD_CMD_TYPE_KEY_EMULATION, key_val);
        else if( key_val[3] == KEY_DIAG_EMULATION_HANDSET )
            ret = hs_key_cmd(key_val);
        
        kfree(key_val);
        
        break;

    case DIAG_WRAPPER_IOCTL_B01:
        ret = diag_leds_cmd_ctl(1, 0, 0);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B02:
        ret = diag_leds_cmd_ctl(0, 1, 0);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B03:
        ret = diag_leds_cmd_ctl(0, 0, 1);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B04:
        ret = diag_leds_cmd_ctl(1, 1, 0);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B05:
        ret = diag_leds_cmd_ctl(1, 0, 1);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B06:
        ret = diag_leds_cmd_ctl(0, 1, 1);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B07:
        ret = diag_leds_cmd_ctl(1, 1, 1);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B08:
        ret = diag_leds_cmd_ctl(0, 0, 0);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_B09:
        ret = leds_cmd(LEDS_CMD_TYPE_KEY, 1);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;

    case DIAG_WRAPPER_IOCTL_B10:
        ret = leds_cmd(LEDS_CMD_TYPE_KEY, 0);
        if( ret != LEDS_CMD_RET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;

    case DIAG_WRAPPER_IOCTL_B11:
        req_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params )
            return -ENOMEM;
            
        err = copy_from_user( pkt_params, (unsigned char *)data, req_size );
        if (err) {
            kfree(pkt_params);
            return DIAG_WRAPPER_IOCTL_NG;
        }
        ret = bd6082gul_reg_write(pkt_params[0], pkt_params[1]);
        break;

    case DIAG_WRAPPER_IOCTL_B12:
        ret = bd6082gul_main_lcd_don( BD6082GUL_LED_ON );
        if( ret != BD6082GUL_LED_SET_OK )
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;

    case DIAG_WRAPPER_IOCTL_C01:
        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_RESET, NULL);
        if (ret != 0)
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_C02:
        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_ENTR_SLEEP, NULL);
        if (ret != 0)
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_C03:
        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_EXIT_SLEEP, NULL);
        if (ret != 0)
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_C04:
        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_ENTR_DEEP, NULL);
        if (ret != 0)
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_C05:
        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_EXIT_DEEP, NULL);
        if (ret != 0)
            ret = DIAG_WRAPPER_IOCTL_NG;
        break;
        
    case DIAG_WRAPPER_IOCTL_C06:
        res_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params )
            return -ENOMEM;
            
        err = copy_from_user( pkt_params, (unsigned char *)data, res_size );
        if (err) {
            kfree(pkt_params);
            return -EINVAL;
        }

        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_GET_REVISION, NULL);

        pkt_params[1] = ret;
        ret = DIAG_WRAPPER_IOCTL_OK;
        
        break;
        
    case DIAG_WRAPPER_IOCTL_C07:
        res_size = ( sizeof(char) * 10 );

        pkt_params = (char *)kmalloc(req_size, GFP_KERNEL);
        if( !pkt_params )
            return -ENOMEM;
            
        err = copy_from_user( pkt_params, (unsigned char *)data, res_size );
        if (err) {
            kfree(pkt_params);
            return -EINVAL;
        }

        ret_val = (int)touch_panel_cmd_callback(TOUCH_PANEL_CMD_TYPE_GET_COORD, 0, diag_touch_panel_cmd_pd_mdcmd);
        if (ret_val != 0)
        {
            ret = -1;
        }
        else
        {
            g_touch_flg = 0;
            timeout = wait_event_timeout(touch_cmd_wait, g_touch_flg != 0, TOUCH_TIMEOUT);
            if(timeout == 0)
            {
                memset(&pkt_params[1], 0xff, 9 );

            } else {
                pkt_params[1] = g_rsp_touch_data.reg0;
                pkt_params[2] = g_rsp_touch_data.reg1;
                pkt_params[3] = g_rsp_touch_data.reg2;
                pkt_params[4] = g_rsp_touch_data.reg3;
                pkt_params[5] = g_rsp_touch_data.reg4;
                pkt_params[6] = g_rsp_touch_data.reg5;
                pkt_params[7] = g_rsp_touch_data.reg6;
                pkt_params[8] = g_rsp_touch_data.reg7;
                pkt_params[9] = g_rsp_touch_data.reg8;

                ret = DIAG_WRAPPER_IOCTL_OK;
            }
        }
        break;
    case DIAG_WRAPPER_IOCTL_C10:
        res_size = ( sizeof(char) * 2 );
        pkt_params = (char *)kmalloc(res_size, GFP_KERNEL);
        if( !pkt_params )
            return -ENOMEM;
            
        err = copy_from_user( pkt_params, (unsigned char *)data, res_size );
        if (err) {
            kfree(pkt_params);
            return -EINVAL;
        }
        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_FW_UPDATE, NULL);
        pkt_params[1] = ret;
        ret = DIAG_WRAPPER_IOCTL_OK;
        break;
    case DIAG_WRAPPER_IOCTL_C11:
        res_size = ( sizeof(char) * 3 );
        pkt_params = (char *)kmalloc(res_size, GFP_KERNEL);
        if( !pkt_params )
            return -ENOMEM;
            
        err = copy_from_user( pkt_params, (unsigned char *)data, res_size );
        if (err) {
            kfree(pkt_params);
            return -EINVAL;
        }
        ret = (int)touch_panel_cmd(TOUCH_PANEL_CMD_TYPE_GET_CHECKSUM, pkt_params);
        break;
    default:
        ret = DIAG_WRAPPER_IOCTL_NG;
        break;
    }
    
    if(pkt_params){
        err = copy_to_user((unsigned char *)data, pkt_params, res_size);
        if (err) {
            ret = -1;
        }
        kfree(pkt_params);
    }
    printk(KERN_DEBUG "[diag_wrapper]%s: ioctl Exit\n", __func__);
    return ret;
}