BZ: 26932
intel_scu_ipc_osc_clk() calculates incorrectly the clock divisor.
This affects at least camera with 9.6 MHz clock in Clovertrail.
Fix it.
Change-Id: Ib35fa790346cb316288e5244f0d65d3b2accfcc4
Signed-off-by: Tuukka Toivonen <tuukka.toivonen@intel.com>
Reviewed-on: http://android.intel.com:8080/38189
Reviewed-by: Kruger, Jozef <jozef.kruger@intel.com>
Reviewed-by: Cohen, David A <david.a.cohen@intel.com>
Tested-by: Koski, Anttu <anttu.koski@intel.com>
Reviewed-by: Yang, Fei <fei.yang@intel.com>
Reviewed-by: Koski, Anttu <anttu.koski@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
#include <linux/intel_mid_pm.h>
#include <linux/ipc_device.h>
#include <linux/kernel.h>
+#include <linux/bitops.h>
/*
* IPC register summary
#else
base_freq = 19200;
#endif
- div = base_freq / khz - 1;
- if (div >= 3 || (div + 1) * khz != base_freq)
+ div = fls(base_freq / khz) - 1;
+ if (div >= 3 || (1 << div) * khz != base_freq)
return -EINVAL; /* Allow only exact frequencies */
ipc_wbuf[1] = 0x03 | (div << 2);
}