Lines Matching refs:stk
280 static int stk8baxx_set_enable(struct stk8baxx_data *stk, char en);
281 static int stk8baxx_read_sensor_data(struct stk8baxx_data *stk);
297 static int stk8baxx_chk_for_addr(struct stk8baxx_data *stk, s32 org_address, unsigned short reset_a… in stk8baxx_chk_for_addr() argument
307 stk->client->addr = reset_address; in stk8baxx_chk_for_addr()
312 stk->client->addr = org_address; in stk8baxx_chk_for_addr()
333 static int stk8baxx_sw_reset(struct stk8baxx_data *stk) in stk8baxx_sw_reset() argument
338 org_addr = stk->client->addr; in stk8baxx_sw_reset()
342 result = stk8baxx_chk_for_addr(stk, org_addr, 0x18); in stk8baxx_sw_reset()
345 result = stk8baxx_chk_for_addr(stk, org_addr, 0x19); in stk8baxx_sw_reset()
348 result = stk8baxx_chk_for_addr(stk, org_addr, 0x08); in stk8baxx_sw_reset()
351 result = stk8baxx_chk_for_addr(stk, org_addr, 0x28); in stk8baxx_sw_reset()
355 result = stk8baxx_chk_for_addr(stk, org_addr, 0x28); in stk8baxx_sw_reset()
358 result = stk8baxx_chk_for_addr(stk, org_addr, 0x18); in stk8baxx_sw_reset()
361 result = stk8baxx_chk_for_addr(stk, org_addr, 0x08); in stk8baxx_sw_reset()
365 result = stk8baxx_chk_for_addr(stk, org_addr, 0x0B); in stk8baxx_sw_reset()
369 static int stk8baxx_reg_init(struct stk8baxx_data *stk, struct i2c_client *client, struct sensor_pr… in stk8baxx_reg_init() argument
381 result = stk8baxx_sw_reset(stk); in stk8baxx_reg_init()
494 atomic_set(&stk->enabled, 0); in stk8baxx_reg_init()
495 stk->first_enable = true; in stk8baxx_reg_init()
496 atomic_set(&stk->cali_status, STK_K_NO_CALI); in stk8baxx_reg_init()
497 atomic_set(&stk->recv_reg, 0); in stk8baxx_reg_init()
499 memset(&stk->fir, 0x00, sizeof(stk->fir)); in stk8baxx_reg_init()
500 atomic_set(&stk->firlength, STK_FIR_LEN); in stk8baxx_reg_init()
501 atomic_set(&stk->fir_en, 1); in stk8baxx_reg_init()
505 stk->stk_tune_offset_record[aa] = 0; in stk8baxx_reg_init()
508 stk->stk_tune_offset[aa] = 0; in stk8baxx_reg_init()
509 stk->stk_tune_sum[aa] = 0; in stk8baxx_reg_init()
510 stk->stk_tune_max[aa] = 0; in stk8baxx_reg_init()
511 stk->stk_tune_min[aa] = 0; in stk8baxx_reg_init()
512 stk->stk_tune_square_sum[aa] = 0LL; in stk8baxx_reg_init()
513 stk->variance[aa] = 0; in stk8baxx_reg_init()
515 stk->stk_tune_done = 0; in stk8baxx_reg_init()
516 stk->stk_tune_index = 0; in stk8baxx_reg_init()
518 stk->event_since_en_limit = STK_EVENT_SINCE_EN_LIMIT_DEF; in stk8baxx_reg_init()
524 static void stk8baxx_low_pass(struct stk8baxx_data *stk, struct stk8baxx_acc *acc_lp) in stk8baxx_low_pass() argument
526 int idx, firlength = atomic_read(&stk->firlength); in stk8baxx_low_pass()
531 if (atomic_read(&stk->fir_en)) { in stk8baxx_low_pass()
532 if (stk->fir.num < firlength) { in stk8baxx_low_pass()
533 stk->fir.raw[stk->fir.num][0] = acc_lp->x; in stk8baxx_low_pass()
534 stk->fir.raw[stk->fir.num][1] = acc_lp->y; in stk8baxx_low_pass()
535 stk->fir.raw[stk->fir.num][2] = acc_lp->z; in stk8baxx_low_pass()
536 stk->fir.sum[0] += acc_lp->x; in stk8baxx_low_pass()
537 stk->fir.sum[1] += acc_lp->y; in stk8baxx_low_pass()
538 stk->fir.sum[2] += acc_lp->z; in stk8baxx_low_pass()
539 stk->fir.num++; in stk8baxx_low_pass()
540 stk->fir.idx++; in stk8baxx_low_pass()
542 idx = stk->fir.idx % firlength; in stk8baxx_low_pass()
543 stk->fir.sum[0] -= stk->fir.raw[idx][0]; in stk8baxx_low_pass()
544 stk->fir.sum[1] -= stk->fir.raw[idx][1]; in stk8baxx_low_pass()
545 stk->fir.sum[2] -= stk->fir.raw[idx][2]; in stk8baxx_low_pass()
546 stk->fir.raw[idx][0] = acc_lp->x; in stk8baxx_low_pass()
547 stk->fir.raw[idx][1] = acc_lp->y; in stk8baxx_low_pass()
548 stk->fir.raw[idx][2] = acc_lp->z; in stk8baxx_low_pass()
549 stk->fir.sum[0] += acc_lp->x; in stk8baxx_low_pass()
550 stk->fir.sum[1] += acc_lp->y; in stk8baxx_low_pass()
551 stk->fir.sum[2] += acc_lp->z; in stk8baxx_low_pass()
552 stk->fir.idx++; in stk8baxx_low_pass()
554 if (abs(stk->fir.sum[0] / firlength) <= STK_ZG_COUNT) in stk8baxx_low_pass()
555 acc_lp->x = (stk->fir.sum[0] * zero_fir) / firlength; in stk8baxx_low_pass()
557 acc_lp->x = stk->fir.sum[0] / firlength; in stk8baxx_low_pass()
558 if (abs(stk->fir.sum[1] / firlength) <= STK_ZG_COUNT) in stk8baxx_low_pass()
559 acc_lp->y = (stk->fir.sum[1] * zero_fir) / firlength; in stk8baxx_low_pass()
561 acc_lp->y = stk->fir.sum[1] / firlength; in stk8baxx_low_pass()
562 if (abs(stk->fir.sum[2] / firlength) <= STK_ZG_COUNT) in stk8baxx_low_pass()
563 acc_lp->z = (stk->fir.sum[2] * zero_fir) / firlength; in stk8baxx_low_pass()
565 acc_lp->z = stk->fir.sum[2] / firlength; in stk8baxx_low_pass()
567 acc_lp->x = stk->fir.sum[0] / firlength; in stk8baxx_low_pass()
568 acc_lp->y = stk->fir.sum[1] / firlength; in stk8baxx_low_pass()
569 acc_lp->z = stk->fir.sum[2] / firlength; in stk8baxx_low_pass()
577 static void stk8baxx_reset_para(struct stk8baxx_data *stk) in stk8baxx_reset_para() argument
582 stk->stk_tune_sum[ii] = 0; in stk8baxx_reset_para()
583 stk->stk_tune_square_sum[ii] = 0LL; in stk8baxx_reset_para()
584 stk->stk_tune_min[ii] = 4096; in stk8baxx_reset_para()
585 stk->stk_tune_max[ii] = -4096; in stk8baxx_reset_para()
586 stk->variance[ii] = 0; in stk8baxx_reset_para()
590 static void stk8baxx_tune(struct stk8baxx_data *stk, struct stk8baxx_acc *acc_xyz) in stk8baxx_tune() argument
598 if (stk->stk_tune_done != 0) in stk8baxx_tune()
605 if (stk->event_since_en >= STK_TUNE_DELAY) { in stk8baxx_tune()
608 stk->stk_tune_index++; in stk8baxx_tune()
611 stk->stk_tune_index = 0; in stk8baxx_tune()
614 if (stk->stk_tune_index == 0) { in stk8baxx_tune()
615 stk8baxx_reset_para(stk); in stk8baxx_tune()
619 stk->stk_tune_sum[ii] += acc[ii]; in stk8baxx_tune()
620 stk->stk_tune_square_sum[ii] += acc[ii] * acc[ii]; in stk8baxx_tune()
621 if (acc[ii] > stk->stk_tune_max[ii]) in stk8baxx_tune()
622 stk->stk_tune_max[ii] = acc[ii]; in stk8baxx_tune()
623 if (acc[ii] < stk->stk_tune_min[ii]) in stk8baxx_tune()
624 stk->stk_tune_min[ii] = acc[ii]; in stk8baxx_tune()
628 if (stk->stk_tune_index == STK_TUNE_NUM) { in stk8baxx_tune()
630 if ((stk->stk_tune_max[ii] - stk->stk_tune_min[ii]) > STK_TUNE_NOISE) { in stk8baxx_tune()
631 stk->stk_tune_index = 0; in stk8baxx_tune()
632 stk8baxx_reset_para(stk); in stk8baxx_tune()
637 stk->stk_tune_offset[0] = stk->stk_tune_sum[0] / STK_TUNE_NUM; in stk8baxx_tune()
638 stk->stk_tune_offset[1] = stk->stk_tune_sum[1] / STK_TUNE_NUM; in stk8baxx_tune()
640 stk->stk_tune_offset[2] = stk->stk_tune_sum[2] / STK_TUNE_NUM - STK_LSB_1G; in stk8baxx_tune()
642 stk->stk_tune_offset[2] = stk->stk_tune_sum[2] / STK_TUNE_NUM - (-STK_LSB_1G); in stk8baxx_tune()
644 offset[0] = (u8)(-stk->stk_tune_offset[0]); in stk8baxx_tune()
645 offset[1] = (u8)(-stk->stk_tune_offset[1]); in stk8baxx_tune()
646 offset[2] = (u8)(-stk->stk_tune_offset[2]); in stk8baxx_tune()
647 stk->stk_tune_offset_record[0] = offset[0]; in stk8baxx_tune()
648 stk->stk_tune_offset_record[1] = offset[1]; in stk8baxx_tune()
649 stk->stk_tune_offset_record[2] = offset[2]; in stk8baxx_tune()
651 stk->stk_tune_done = 1; in stk8baxx_tune()
652 atomic_set(&stk->cali_status, STK_K_SUCCESS_TUNE); in stk8baxx_tune()
653 stk->event_since_en = 0; in stk8baxx_tune()
655 …intk(KERN_INFO "%s:TUNE done, var=%u,%u,%u\n", __func__, stk->variance[0], stk->variance[1], stk->… in stk8baxx_tune()
661 static void stk8baxx_sign_conv(struct stk8baxx_data *stk, s16 raw_acc_data[], u8 acc_reg_data[]) in stk8baxx_sign_conv() argument
680 static int stk8baxx_set_enable(struct stk8baxx_data *stk, char en) in stk8baxx_set_enable() argument
688 printk("%s:+++1+++--k_status=%d,first_enable=%d\n", __func__, k_status, stk->first_enable); in stk8baxx_set_enable()
689 if (stk->first_enable && k_status != STK_K_RUNNING) { in stk8baxx_set_enable()
690 stk->first_enable = false; in stk8baxx_set_enable()
691 printk("%s:+++2+++first_enable=%d\n", __func__, stk->first_enable); in stk8baxx_set_enable()
692 stk8baxx_load_cali(stk); in stk8baxx_set_enable()
696 if (new_enabled == atomic_read(&stk->enabled)) in stk8baxx_set_enable()
712 stk->event_since_en = 0; in stk8baxx_set_enable()
714 if ((k_status & 0xF0) != 0 && stk->stk_tune_done == 0) { in stk8baxx_set_enable()
715 stk->stk_tune_index = 0; in stk8baxx_set_enable()
716 stk8baxx_reset_para(stk); in stk8baxx_set_enable()
721 atomic_set(&stk->enabled, new_enabled); in stk8baxx_set_enable()
744 static int stk8baxx_read_sensor_data(struct stk8baxx_data *stk) in stk8baxx_read_sensor_data() argument
751 (struct sensor_private_data *)i2c_get_clientdata(stk->client); in stk8baxx_read_sensor_data()
760 result = sensor_rx_data(stk->client, (char *)acc_reg, sensor->ops->read_len); in stk8baxx_read_sensor_data()
766 stk8baxx_sign_conv(stk, raw_acc, acc_reg); in stk8baxx_read_sensor_data()
775 stk8baxx_tune(stk, &acc); in stk8baxx_read_sensor_data()
785 stk8baxx_low_pass(stk, &acc); in stk8baxx_read_sensor_data()
788 stk->acc_xyz.x = acc.x; in stk8baxx_read_sensor_data()
789 stk->acc_xyz.y = acc.y; in stk8baxx_read_sensor_data()
790 stk->acc_xyz.z = acc.z; in stk8baxx_read_sensor_data()
792 …rintk(KERN_INFO "stk8baxx acc= %4d, %4d, %4d\n", (int)stk->acc_xyz.x, (int)stk->acc_xyz.y, (int)st… in stk8baxx_read_sensor_data()
852 struct stk8baxx_data *stk; in sensor_init() local
859 stk = kzalloc(sizeof(*stk), GFP_KERNEL); in sensor_init()
860 if (!stk) { in sensor_init()
864 stk8baxx_data_ptr = stk; in sensor_init()
866 stk->stk8baxx_placement = STK8BAXX_DEF_PLACEMENT; in sensor_init()
867 stk->client = client; in sensor_init()
868 ret = stk8baxx_reg_init(stk, client, sensor); in sensor_init()
873 stk->re_enable = false; in sensor_init()
889 dev_set_drvdata(&p_input_dev->dev, stk); in sensor_init()