static int bma020_accelerometer_suspend( struct platform_device* pdev, pm_message_t state ) { printk(" %s \n",__func__); bma020_set_mode( BMA020_MODE_SLEEP ); if (bma020.state & ACC_ENABLED) bma_acc_disable(); return 0; }
void bma020_set_delay(short delay) { int64_t new_delay; int err; // ms to ns new_delay = delay * 1000000; // printk("------> BMA020 from AKM : new delay = %lldns, old delay = %lldns\n", // new_delay, ktime_to_ns(bma020.acc_poll_delay)); mutex_lock(&bma020.power_lock); if (new_delay != ktime_to_ns(bma020.acc_poll_delay)) { bma_acc_disable(); bma020.acc_poll_delay = ns_to_ktime(new_delay); bma020.state |= ACC_ENABLED; bma_acc_enable(); } mutex_unlock(&bma020.power_lock); return; }
static ssize_t poll_delay_store(struct device *dev,struct device_attribute *attr, const char *buf, size_t size) { int64_t new_delay; int err; err = strict_strtoll(buf, 10, &new_delay); if (err < 0) return err; printk("new delay = %lldns, old delay = %lldns\n", new_delay, ktime_to_ns(bma020.acc_poll_delay)); mutex_lock(&bma020.power_lock); if (new_delay != ktime_to_ns(bma020.acc_poll_delay)) { bma_acc_disable(); bma020.acc_poll_delay = ns_to_ktime(new_delay); if (bma020.state & ACC_ENABLED) { bma_acc_enable(); } } mutex_unlock(&bma020.power_lock); return size; }