static int asuspec_chip_init(struct i2c_client *client) { int ret_val = 0; int i = 0; ec_chip->op_mode = 0; for ( i = 0; i < 10; i++){ ret_val = asuspec_i2c_test(client); if (ret_val < 0) msleep(300); else break; } if(ret_val < 0){ goto fail_to_access_ec; } for ( i=0; i<8; i++){ asuspec_i2c_read_data(client); } if (asuspec_dockram_read_data(0x01) < 0){ goto fail_to_access_ec; } strcpy(ec_chip->ec_model_name, &ec_chip->i2c_dm_data[1]); ASUSPEC_NOTICE("Model Name: %s\n", ec_chip->ec_model_name); if (asuspec_dockram_read_data(0x02) < 0){ goto fail_to_access_ec; } strcpy(ec_chip->ec_version, &ec_chip->i2c_dm_data[1]); ASUSPEC_NOTICE("EC-FW Version: %s\n", ec_chip->ec_version); if (asuspec_dockram_read_data(0x03) < 0){ goto fail_to_access_ec; } ASUSPEC_INFO("EC-Config Format: %s\n", &ec_chip->i2c_dm_data[1]); if (asuspec_dockram_read_data(0x04) < 0){ goto fail_to_access_ec; } strcpy(ec_chip->ec_pcba, &ec_chip->i2c_dm_data[1]); ASUSPEC_NOTICE("PCBA Version: %s\n", ec_chip->ec_pcba); if(factory_mode == 2) asuspec_enter_factory_mode(); else asuspec_enter_normal_mode(); ec_chip->status = 1; switch_set_state(&ec_chip->pad_sdev, !ec_chip->pad_sdev.state); fail_to_access_ec: return 0; }
static void asuspec_work_function(struct work_struct *dat) { int gpio = asuspec_apwake_gpio; int irq = gpio_to_irq(gpio); int ret_val = 0; ret_val = asuspec_i2c_read_data(ec_chip->client); enable_irq(irq); ASUSPEC_NOTICE("0x%x 0x%x 0x%x 0x%x\n", ec_chip->i2c_data[0], ec_chip->i2c_data[1], ec_chip->i2c_data[2], ec_chip->i2c_data[3]); if (ret_val < 0){ return ; } if (ec_chip->i2c_data[1] & ASUSPEC_OBF_MASK){ if (ec_chip->i2c_data[1] & ASUSPEC_SMI_MASK){ asuspec_smi(); return ; } } }
static void asuspec_stresstest_work_function(struct work_struct *dat) { asuspec_i2c_read_data(ec_chip->client); queue_delayed_work(asuspec_wq, &asuspec_stress_work, HZ/ec_chip->polling_rate); }