diff options
| -rw-r--r-- | arch/arm/configs/omap3_h1_defconfig | 25 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3h1.c | 263 | ||||
| -rw-r--r-- | drivers/staging/iio/imu/inv_mpu/inv_mpu_core.c | 148 | ||||
| -rw-r--r-- | drivers/staging/iio/imu/inv_mpu/inv_mpu_misc.c | 4 | 
4 files changed, 417 insertions, 23 deletions
diff --git a/arch/arm/configs/omap3_h1_defconfig b/arch/arm/configs/omap3_h1_defconfig index f4eaa295e0e..94035e8bef3 100644 --- a/arch/arm/configs/omap3_h1_defconfig +++ b/arch/arm/configs/omap3_h1_defconfig @@ -399,12 +399,12 @@ CONFIG_ARM_ERRATA_430973=y  #  # Kernel Features  # -# CONFIG_HAVE_ARM_ARCH_TIMER is not set +CONFIG_HAVE_ARM_ARCH_TIMER=y  CONFIG_VMSPLIT_3G=y  # CONFIG_VMSPLIT_2G is not set  # CONFIG_VMSPLIT_1G is not set  CONFIG_PAGE_OFFSET=0xC0000000 -# CONFIG_ARM_PSCI is not set +CONFIG_ARM_PSCI=y  CONFIG_ARCH_NR_GPIO=256  # CONFIG_PREEMPT_NONE is not set  # CONFIG_PREEMPT_VOLUNTARY is not set @@ -493,7 +493,10 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y  # CONFIG_ARM_EXYNOS5440_CPUFREQ is not set  # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set  CONFIG_ARM_OMAP2PLUS_CPUFREQ=y -# CONFIG_CPU_IDLE is not set +CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE_MULTIPLE_DRIVERS is not set +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_CPU_IDLE_GOV_MENU=y  # CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED is not set  # @@ -528,10 +531,15 @@ CONFIG_HAS_WAKELOCK=y  CONFIG_WAKELOCK=y  CONFIG_PM_SLEEP=y  CONFIG_PM_AUTOSLEEP=y -# CONFIG_PM_WAKELOCKS is not set +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y  CONFIG_PM_RUNTIME=y  CONFIG_PM=y -# CONFIG_PM_DEBUG is not set +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +CONFIG_PM_TEST_SUSPEND=y +CONFIG_PM_SLEEP_DEBUG=y  # CONFIG_APM_EMULATION is not set  CONFIG_ARCH_HAS_OPP=y  CONFIG_PM_OPP=y @@ -1841,7 +1849,7 @@ CONFIG_SND_SOC_DMAENGINE_PCM=y  # CONFIG_SND_DESIGNWARE_I2S is not set  CONFIG_SND_OMAP_SOC=y  # CONFIG_SND_OMAP_SOC_C55 is not set -#CONFIG_SND_OMAP_SOC_OMAP3_H1 is not set +# CONFIG_SND_OMAP_SOC_OMAP3_H1 is not set  CONFIG_SND_SOC_I2C_AND_SPI=y  # CONFIG_SND_SOC_ALL_CODECS is not set  # CONFIG_SND_SIMPLE_CARD is not set @@ -2027,6 +2035,7 @@ CONFIG_MUSB_PIO_ONLY=y  # CONFIG_USB_EZUSB_FX2 is not set  # CONFIG_USB_HSIC_USB3503 is not set  CONFIG_USB_PHY=y +# CONFIG_USB_OTG_WAKELOCK is not set  CONFIG_NOP_USB_XCEIV=y  # CONFIG_OMAP_CONTROL_USB is not set  # CONFIG_OMAP_USB2 is not set @@ -2386,7 +2395,9 @@ CONFIG_COMMON_CLK=y  #  # Hardware Spinlock drivers  # +CONFIG_CLKSRC_OF=y  CONFIG_CLKSRC_MMIO=y +CONFIG_ARM_ARCH_TIMER=y  # CONFIG_MAILBOX is not set  # CONFIG_IOMMU_SUPPORT is not set @@ -2727,7 +2738,7 @@ CONFIG_TRACING_SUPPORT=y  # CONFIG_FTRACE is not set  # CONFIG_RBTREE_TEST is not set  # CONFIG_INTERVAL_TREE_TEST is not set -# CONFIG_DYNAMIC_DEBUG is not set +CONFIG_DYNAMIC_DEBUG=y  # CONFIG_DMA_API_DEBUG is not set  # CONFIG_ATOMIC64_SELFTEST is not set  # CONFIG_SAMPLES is not set diff --git a/arch/arm/mach-omap2/board-omap3h1.c b/arch/arm/mach-omap2/board-omap3h1.c index 57672948fdb..ff4de235e20 100644 --- a/arch/arm/mach-omap2/board-omap3h1.c +++ b/arch/arm/mach-omap2/board-omap3h1.c @@ -33,11 +33,16 @@  #include <linux/i2c/atmel_mxt_ts.h>  #include <linux/gpio.h> +#include <linux/gpio_keys.h>  #include <linux/regulator/machine.h>  #include <linux/regulator/fixed.h>  #include <linux/mfd/tps65910.h> +#include <linux/kmod.h> /* for call_usermodehelper - not used, remove? */ +#include <linux/wakelock.h> /* used in interrupt, waking up.  */ +#include <linux/debugfs.h> +  #include <linux/led-lm3530.h>  #include <asm/mach-types.h> @@ -62,6 +67,7 @@  #define NAND_CS 0  #define MPUIRQ_GPIO 31 +#define ON_OFF_BUTTON_GPIO 30  #define ATMEL_MXT_GPIO 105  #define USB_IRQ 124  #define USB_ON_ETK_D7 21 @@ -72,7 +78,12 @@  #define LCD_RESET_GPIO 122  #endif - +static struct accelerometer_wake { +  int awake; +  struct wake_lock lock; +  char lock_name[100]; +  int user_pid; +} acc_wake;  static struct mtd_partition omap3h1_nand_partitions[] = {  	/* All the partition sizes are listed in terms of NAND block size */ @@ -156,12 +167,20 @@ static int __init omap3h1_spi_init(void) {  } +/*  + * int_config is interrupt config, INT_ENABLE register. To enable _all_  + * interrupts, set to 0x59. I think. --mfj + *  + * Level shifter seems to set power rail between two options - 1 means VDD. + * (0 means VLogic, which I'm not sure what it is). + */ +  static struct mpu_platform_data mpu_data = {  	.int_config  = 0x00, -	.level_shifter = 0, -	.orientation = {  -1,  0,  0, +	.level_shifter = 1, +	.orientation = {   -1,  0,  0,  					   0,  1,  0, -					   0,  0, -1 }, +					   0,  0,  -1 },  };  static struct lm3530_platform_data omap3h1_backlight_platform_data = { @@ -197,6 +216,33 @@ static struct platform_device omap3h1_dmic_codec = {  };  /* --------------------------------------------------------------------------- */ +/* Keys / buttons settings  + */ + +static struct gpio_keys_button gpio_buttons[] = { +	{ +        .code			= KEY_POWER, /* 26 */ +		.gpio			= ON_OFF_BUTTON_GPIO, +		.desc			= "accelerometer", +		.wakeup			= 1, +	}, +}; + +static struct gpio_keys_platform_data gpio_key_info = { +	.buttons	= gpio_buttons, +	.nbuttons	= ARRAY_SIZE(gpio_buttons), +}; + +static struct platform_device omap3h1_keys = { +	.name	= "gpio-keys", +	.id	= -1, +	.dev	= { +		.platform_data	= &gpio_key_info, +	}, +}; + + +/* --------------------------------------------------------------------------- */  /* USB settings    */ @@ -515,10 +561,177 @@ static struct i2c_board_info __initdata omap3h1_i2c3_board_info[] = {           },  }; +/* --------------------------------------------------------------------------- */ +/* Create debugfs entry  + *  + * We need to have this so that our wake-up thread can tell us it's PID.  + * That PID will then be used when waking the system up. + */ + + +struct dentry * pidfile; + +#define SIG_OLIO_WAKE 44	// we choose 44 as our signal number (real-time signals are in the range of 33 to 64) + +static ssize_t write_pid(struct file *file,  +                         const char __user *buf, +                         size_t count,  +                         loff_t *ppos) +{ +	char mybuf[10]; +	int pid = 0; + +	/* read the value from user space */ + +	if(count > 10) +      return -EINVAL; +	if (copy_from_user(mybuf, buf, count) != 0) { +      /* nothing read?? */ +      printk ("OLIO: write_pid: Error??\n"); +      return 0; +    } + +	sscanf(mybuf, "%d", &pid); +	 +    printk("pid read = %d\n", pid); +     +    acc_wake.user_pid = pid; + +	return count; +} + +static ssize_t send_wake_signal (void) { +    int ret; +	struct siginfo info; +	struct task_struct *t; + +	/* send the signal */ + +    printk ("Now sending signal!\n"); + +	memset(&info, 0, sizeof(struct siginfo)); + +    /* this is bit of a trickery: SI_QUEUE is normally used by sigqueue from user space, +     * and kernel space should use SI_KERNEL. But if SI_KERNEL is used the real_time data  +     * is not delivered to the user space signal handler function.  +     */ + +	info.si_signo = SIG_OLIO_WAKE; +	info.si_code  = SI_QUEUE; + +  	/* real time signals may have 32 bits of data. */ + +	info.si_int = 1234; + +	rcu_read_lock(); + +	t = pid_task(find_pid_ns(acc_wake.user_pid, &init_pid_ns), PIDTYPE_PID);	 + +	if(t == NULL){ +        rcu_read_unlock(); +		printk("no such pid\n"); +		return -ENODEV; +	} + +    rcu_read_unlock(); + +    /* send the signal */ + +	ret = send_sig_info(SIG_OLIO_WAKE, &info, t); + +	if (ret < 0) { +		printk("error sending signal\n"); +	} +    return ret; +} + +static const struct file_operations h1_fops = { +    .write = write_pid, +}; + + + +/*************************************************************************** + * acc_irq_handler - handle interrupt from accelerometer + *  + * This routine gets called when an interrupt from the accelerometer  + * happens. Time out is in milliseconds. + *  + * TODO: BREAK this all out, place it in it's own kernel driver together + * with the configuration stuff for the accelerometer (the low power sleep  + * mode stuff). + */ + +#define OLIO_DOUBLE_TAP 800 +#define OLIO_ONE_SECOND 1000 + +static unsigned long previous; + +static irqreturn_t acc_irq_handler_thr(int irq, void * omap3h1_d) { +  /* struct platform_device** omap3h1_devs = (struct platform_device **) omap3h1_d; */ + +  int ret = 99; +  unsigned long now; + +  printk (KERN_DEBUG "acc_irq_handler_thr: Entered!\n"); + +  now = jiffies; + +  if (jiffies_to_msecs(now - previous) < OLIO_DOUBLE_TAP) { +    printk (KERN_DEBUG "Double tap detected!\n");     +    /* We want to wake up. Take wake lock (and send signal to user space?) +     * BT driver only takes wake lock, then lets higher levels handle  +     * everything ... but what if there's nothing there to take the lock? +     */ + +    send_wake_signal();     +    wake_lock_timeout (&acc_wake.lock, msecs_to_jiffies (10 * OLIO_ONE_SECOND)); + +    previous = 0; +  } else { +    previous = now; +  } + +  printk (KERN_DEBUG "acc_irq_handler_thr: Leaving! (ret = %d)\n", ret); + +  return IRQ_HANDLED; +} + +static irqreturn_t acc_irq_handler(int irq, void * omap3h1_d) { +  printk (KERN_DEBUG "acc_irq_handler: Entered!\n"); +   +  /* nothing to do, other than wake the main thread */ +   +  printk (KERN_DEBUG "acc_irq_handler: Leaving!\n"); +  return IRQ_WAKE_THREAD; +} + +static int __init omap3_acc_irq_init (int irq, void * dev_id) { +    irq_set_irq_wake(irq, 1); + +    if (request_threaded_irq (irq, acc_irq_handler,  +                              acc_irq_handler_thr, 0x81, "acc_wake",  +                              dev_id)) { +      printk (KERN_DEBUG "Couldn't register handler for accelerometer IRQ\n"); +    } + +    /* Should check the return value ... but if it fails, what do we do? */ +     +    return 0; +} + + + +/*************************************************************************** + * omap3_h1_i2c_init - init the i2c buses  + * + */  static int __init omap3_h1_i2c_init(void)  { -  /* Ugly hack: In Linux 3.10 we need to request an IRQ through  +    int acc_irq; + +  /* In Linux 3.10 we need to request an IRQ through      * gpio_to_irq. This means it can't be set at compile time, and     * must be done at runtime. In other words, here.     */ @@ -526,15 +739,20 @@ static int __init omap3_h1_i2c_init(void)  	gpio_request_one(ATMEL_MXT_GPIO, GPIOF_IN, "atmel_mxt_ts CHG");  	gpio_request_one(MPUIRQ_GPIO, GPIOF_IN, "mpu6515 IRQ pin"); +	gpio_request_one(ON_OFF_BUTTON_GPIO, GPIOF_OUT_INIT_LOW, "on-off button"); + +    acc_irq = gpio_to_irq(MPUIRQ_GPIO); +  #ifdef CONFIG_MACH_OMAP3_H1_DVT2  	omap3h1_i2c2_board_info[2].irq = gpio_to_irq(ATMEL_MXT_GPIO); -    omap3h1_i2c2_board_info[0].irq = gpio_to_irq(MPUIRQ_GPIO); +    omap3h1_i2c2_board_info[0].irq = acc_irq;  #else  	omap3h1_i2c1_board_info[3].irq = gpio_to_irq(ATMEL_MXT_GPIO); -    omap3h1_i2c1_board_info[1].irq = gpio_to_irq(MPUIRQ_GPIO); +    omap3h1_i2c1_board_info[1].irq = acc_irq;  #endif -	gpio_request_one(USB_ON_ETK_D7, GPIOF_OUT_INIT_HIGH, "USB on"); +	gpio_request_one(USB_ON_ETK_D7, GPIOF_OUT_INIT_HIGH, "USB on"); +          /* Register buses */  	omap_register_i2c_bus(1, 400, omap3h1_i2c1_board_info, ARRAY_SIZE(omap3h1_i2c1_board_info)); @@ -556,6 +774,7 @@ static struct platform_device *omap3h1_devices[] __initdata = {          &bcm20702_bluetooth_device,          &nop_phy_device,  		&omap3h1_dmic_codec, +        &omap3h1_keys,  };  #ifdef CONFIG_OMAP_MUX @@ -615,8 +834,9 @@ static struct omap_board_mux board_mux[] __initdata = {  #endif /* CONFIG_MACH_OMAP3_H1_DVT */      /* accelerometer */ -     -    OMAP3_MUX(JTAG_EMU1, (OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT)), +      +    OMAP3_MUX(JTAG_EMU1, (OMAP_MUX_MODE4 | OMAP_PIN_INPUT  +                          | OMAP_PIN_OFF_WAKEUPENABLE)),      /* USB on */ @@ -626,6 +846,18 @@ static struct omap_board_mux board_mux[] __initdata = {  };  #endif +static int __init omap3_wake_init (void) { +  pidfile = debugfs_create_file("wake_signal_pid", 0200, NULL, NULL, &h1_fops); +  acc_wake.user_pid = 0; /* No user thread yet */ + +  snprintf(acc_wake.lock_name, sizeof(acc_wake.lock_name), +           "Accelerometer"); +  wake_lock_init(&acc_wake.lock, WAKE_LOCK_SUSPEND, +                 acc_wake.lock_name); +  return 0; +} + +  static void __init omap3_h1_init(void)  {      omap3_mux_init(board_mux, OMAP_PACKAGE_CBP); @@ -646,9 +878,16 @@ static void __init omap3_h1_init(void)  	usb_bind_phy("musb-hdrc.0.auto", 0, "nop_usb_xceiv"); /* "tusb-usb-h1" */  	usb_musb_init(&musb_board_data); -    /* usbhs_init(&usbhs_bdata); */ /* We don't need this */ -    /* h1_opp_init(); */ +    /* For handling interrupts from the accelerometer */ + +    previous = jiffies; +     +    /* Init the code that handles wake ups */ + +    omap3_wake_init(); + +    omap3_acc_irq_init(omap3h1_i2c2_board_info[0].irq, (void *) &omap3h1_devices);  }  MACHINE_START(OMAP3_H1, "Olio OMAP3 H1 Board") diff --git a/drivers/staging/iio/imu/inv_mpu/inv_mpu_core.c b/drivers/staging/iio/imu/inv_mpu/inv_mpu_core.c index 8fba7034b4d..2a1fec7b54f 100644 --- a/drivers/staging/iio/imu/inv_mpu/inv_mpu_core.c +++ b/drivers/staging/iio/imu/inv_mpu/inv_mpu_core.c @@ -29,6 +29,9 @@  #include <linux/spinlock.h>  #include <linux/iio/sysfs.h> +/* OLIO */ +#include "olio_specials.h" +  #include "inv_mpu_iio.h"  #include "inv_test/inv_counters.h" @@ -148,7 +151,7 @@ int inv_i2c_read_base(struct inv_mpu_state *st, u16 i2c_addr,  	INV_I2C_INC_MPUWRITE(3);  	INV_I2C_INC_MPUREAD(length); -#if CONFIG_DYNAMIC_DEBUG +#ifdef CONFIG_DYNAMIC_DEBUG  	{  		char *read = 0;  		pr_debug("%s RD%02X%02X%02X -> %s%s\n", st->hw->name, @@ -2875,6 +2878,134 @@ static int inv_setup_suspend_batchmode(struct iio_dev *indio_dev, bool suspend)  }  #ifdef CONFIG_PM + +/*************************************************************************** + * olio_set_lpa_off - turn off low power acc mode + * + * This function turns off the LPA mode, and resets (not yet! 20150331) the + * acc settings to what they were before we went into suspend mode.  + */ + +int olio_set_lpa_off (struct inv_mpu_state * st) { +  u8 off = 0; +  u8 regstate; +  int result; +  int length = 1; + +  printk("%s olio_set_lpa_off.\n", st->hw->name); + +  /* Set the motion lpa to off */ + +  result = inv_i2c_single_write(st, REG_6500_ACCEL_INTEL_CTRL, off); +  if (result) goto i2c_error; + +  st->mot_int.mot_on = off; +  st->chip_config.lpa_mode = off; + +  result = inv_i2c_read (st, REG_PWR_MGMT_1, length, ®state); +  if (result) goto i2c_error; + +  regstate &= (~BIT_SLEEP & ~BIT_CYCLE & ~0x10); + +  result = inv_i2c_single_write(st, REG_PWR_MGMT_1,  BIT_CYCLE); +  if (result) goto i2c_error; +   +  return result; + +i2c_error: +  printk ("%s:%s: Olio: Error, i2c related...\n",  +            __FILE__, __FUNCTION__); +  return result; +} + + +/*************************************************************************** + * olio_set_lpa_on - turn on low power acc mode + * + * This function turns on the LPA mode. Lots of settings here, all taken + * from Invensense docs for the 6515 chip. + */ + +int olio_set_lpa_on (struct inv_mpu_state * st) { +  int result; +  u8 regstate; +  int length = 1; + +  int freq; +  u8 thres; + +  /* OLIO_FREQ is 0 -> 3.  +   * thres is 0-255 - 128 seems OK. Steps of 4. +   */ + +  printk("%s olio_set_lpa_on.\n", st->hw->name); + +  freq  = OLIO_DEF_FREQ; +  thres = OLIO_DEF_THRES; +     +  /* In PWR_MGMT_1 (0x6B) make CYCLE =0, SLEEP = 0 and STANDBY = 0 */ + +  result = inv_i2c_read (st, REG_PWR_MGMT_1, length, ®state); +  if (result) goto i2c_error; + +  regstate &= (~BIT_SLEEP & ~BIT_CYCLE & ~0x10); +  result = inv_i2c_single_write(st, REG_PWR_MGMT_1, regstate); +  if (result) goto i2c_error; + +  /* In PWR_MGMT_2 (0x6C) set DIS_XA, DIS_YA, DIS_ZA = 0 and DIS_XG, DIS_YG, DIS_ZG = 1 */ + +  result = inv_i2c_single_write(st, REG_PWR_MGMT_2, 0x07); +  if (result) goto i2c_error; + +  /* In ACCEL_CONFIG 2 (0x1D) set ACCEL_FCHOICE_B = 0 and A_DLPFCFG[2:0]=1(b001) */ + +  regstate = 0; +  result = inv_i2c_read (st, REG_6500_ACCEL_CONFIG2, length, ®state); +  if (result) goto i2c_error; +  +  regstate &= 0xF1; /* We're setting last four bits to 0001. Everything else we don't care. */ +  result = inv_i2c_single_write (st, REG_6500_ACCEL_CONFIG2, regstate); +  if (result) goto i2c_error; + +  /* Set motion interrupts only */ + +  st->mot_int.mot_on = 1; +  st->chip_config.lpa_mode = 1; + +  result = inv_i2c_single_write (st, REG_INT_ENABLE, 0x40); +  if (result) goto i2c_error; + +  /* Enable accel hw intelligence */ + +  result = inv_i2c_single_write(st, REG_6500_ACCEL_INTEL_CTRL,  +                                BIT_ACCEL_INTEL_ENABLE | BIT_ACCEL_INTEL_MODE); +  if (result) goto i2c_error; +   +  /* Set the threshold */ + +  result = inv_i2c_single_write(st, REG_ACCEL_MOT_THR, thres); +  if (result) goto i2c_error; + +  st->mot_int.mot_thr = thres; + +  /* Set the frequency of acc checks */ + +  inv_lpa_freq(st, freq); +  +  /* Set the motion lpa to on */ +   +  result = inv_i2c_single_write(st, REG_PWR_MGMT_1, BIT_CYCLE); +  if (result) goto i2c_error; +   +  return 0; + +i2c_error:   +  printk ("%s:%s: Olio: Error, i2c related...\n",  +            __FILE__, __FUNCTION__); +  return result; +} + +  static int inv_mpu_resume(struct device *dev)  {  	struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); @@ -2886,6 +3017,7 @@ static int inv_mpu_resume(struct device *dev)  	result = 0;  	if (st->chip_config.dmp_on && st->chip_config.enable) { +      pr_debug("%s dmp_on and enabled\n", st->hw->name);  		result = st->set_power_state(st, true);  		result |= inv_read_time_and_ticks(st, true);  		if (st->ped.int_on) @@ -2896,7 +3028,12 @@ static int inv_mpu_resume(struct device *dev)  		result |= inv_setup_suspend_batchmode(indio_dev, false);  	} else if (st->chip_config.enable) {  		result = st->set_power_state(st, true); -	} +	}  + +    /* TODO: OLIO, mfj: Here we need to turn the low-power motion +     * detection off, since the watch is now awake.  +     */  +    result = olio_set_lpa_off (st);  	mutex_unlock(&indio_dev->mlock);  	mutex_unlock(&st->suspend_resume_lock); @@ -2915,6 +3052,7 @@ static int inv_mpu_suspend(struct device *dev)  	result = 0;  	if (st->chip_config.dmp_on && st->chip_config.enable) { +      pr_debug("%s dmp_on and enabled\n", st->hw->name);  		/* turn off pedometer interrupt during suspend */  		if (st->ped.int_on)  			result |= inv_enable_pedometer_interrupt(st, false); @@ -2933,6 +3071,12 @@ static int inv_mpu_suspend(struct device *dev)  		result |= st->set_power_state(st, false);  	} +    /* OLIO, mfj: Here we need to set the low-power motion +     * detection, for waking the watch up. +     */ +     +    result |= olio_set_lpa_on (st); +  	mutex_unlock(&indio_dev->mlock);  	mutex_lock(&st->suspend_resume_lock); diff --git a/drivers/staging/iio/imu/inv_mpu/inv_mpu_misc.c b/drivers/staging/iio/imu/inv_mpu/inv_mpu_misc.c index 70f239a3575..c327c75b1ab 100644 --- a/drivers/staging/iio/imu/inv_mpu/inv_mpu_misc.c +++ b/drivers/staging/iio/imu/inv_mpu/inv_mpu_misc.c @@ -323,7 +323,7 @@ int mpu_memory_write(struct inv_mpu_state *st, u8 mpu_addr, u16 mem_addr,  	msgs[2].len = len + 1;  	INV_I2C_INC_MPUWRITE(3 + 3 + (2 + len)); -#if CONFIG_DYNAMIC_DEBUG +#ifdef CONFIG_DYNAMIC_DEBUG  	{  		char *write = 0;  		pr_debug("%s WM%02X%02X%02X%s%s - %d\n", st->hw->name, @@ -395,7 +395,7 @@ int mpu_memory_read(struct inv_mpu_state *st, u8 mpu_addr, u16 mem_addr,  	INV_I2C_INC_MPUWRITE(3 + 3 + 3);  	INV_I2C_INC_MPUREAD(len); -#if CONFIG_DYNAMIC_DEBUG +#ifdef CONFIG_DYNAMIC_DEBUG  	{  		char *read = 0;  		pr_debug("%s RM%02X%02X%02X%02X - %s%s\n", st->hw->name,  |