Commit cbfd2cd7 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mfd-fixes-3.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-fixes

Pull mfd fixes from Samuel Ortiz:
 "This is the first batch of MFD fixes for 3.10.

  It's bigger than I would like, most of it is due to the big ab/db8500
  merge that went through during the 3.10 merge window.

  So we have:

   - Some build fixes for the tps65912 and ab8500 drivers.
   - A couple of build fixes for the the si476x driver with pre 4.3 gcc
     compilers.
   - A few runtime breakage fixes (probe failures or oopses) for the
     ab8500 and db8500 drivers.
   - Some sparse or regular gcc warning fixes for the si476x, ab8500 and
     cros_ec drivers."

* tag 'mfd-fixes-3.10-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-fixes:
  mfd: ab8500-sysctrl: Let sysctrl driver work without pdata
  mfd: db8500-prcmu: Update stored DSI PLL divider value
  mfd: ab8500-sysctrl: Always enable pm_power_off handler
  mfd: ab8500-core: Pass GPADC compatible string to MFD core
  mfd: db8500-prcmu: Supply the pdata_size attribute for db8500-thermal
  mfd: ab8500-core: Use the correct driver name when enabling gpio/pinctrl
  mfd: ab8500: Pass AB8500 IRQ to debugfs code by resource
  mfd: ab8500-gpadc: Suppress 'ignoring regulator_enable() return value' warning
  mfd: ab8500-sysctrl: Set sysctrl_dev during probe
  mfd: ab8500-sysctrl: Fix sparse warning
  mfd: abx500-core: Fix sparse warning
  mfd: ab8500: Debugfs code depends on gpadc
  mfd: si476x: Use get_unaligned_be16() for unaligned be16 loads
  mfd: cros_ec_spi: Use %z to format pointer differences
  mfd: si476x: Do not use binary constants
  mfd: tps65912: Select MFD_CORE
parents 94f1be97 5649d8f9
...@@ -579,7 +579,7 @@ config AB8500_CORE ...@@ -579,7 +579,7 @@ config AB8500_CORE
config AB8500_DEBUG config AB8500_DEBUG
bool "Enable debug info via debugfs" bool "Enable debug info via debugfs"
depends on AB8500_CORE && DEBUG_FS depends on AB8500_GPADC && DEBUG_FS
default y if DEBUG_FS default y if DEBUG_FS
help help
Select this option if you want debug information using the debug Select this option if you want debug information using the debug
...@@ -818,6 +818,7 @@ config MFD_TPS65910 ...@@ -818,6 +818,7 @@ config MFD_TPS65910
config MFD_TPS65912 config MFD_TPS65912
bool "TI TPS65912 Power Management chip" bool "TI TPS65912 Power Management chip"
depends on GPIOLIB depends on GPIOLIB
select MFD_CORE
help help
If you say yes here you get support for the TPS65912 series of If you say yes here you get support for the TPS65912 series of
PM chips. PM chips.
......
...@@ -867,6 +867,15 @@ static struct resource ab8500_chargalg_resources[] = {}; ...@@ -867,6 +867,15 @@ static struct resource ab8500_chargalg_resources[] = {};
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
static struct resource ab8500_debug_resources[] = { static struct resource ab8500_debug_resources[] = {
{
.name = "IRQ_AB8500",
/*
* Number will be filled in. NOTE: this is deliberately
* not flagged as an IRQ in ordet to avoid remapping using
* the irqdomain in the MFD core, so that this IRQ passes
* unremapped to the debug code.
*/
},
{ {
.name = "IRQ_FIRST", .name = "IRQ_FIRST",
.start = AB8500_INT_MAIN_EXT_CH_NOT_OK, .start = AB8500_INT_MAIN_EXT_CH_NOT_OK,
...@@ -1051,6 +1060,7 @@ static struct mfd_cell ab8500_devs[] = { ...@@ -1051,6 +1060,7 @@ static struct mfd_cell ab8500_devs[] = {
}, },
{ {
.name = "ab8500-gpadc", .name = "ab8500-gpadc",
.of_compatible = "stericsson,ab8500-gpadc",
.num_resources = ARRAY_SIZE(ab8500_gpadc_resources), .num_resources = ARRAY_SIZE(ab8500_gpadc_resources),
.resources = ab8500_gpadc_resources, .resources = ab8500_gpadc_resources,
}, },
...@@ -1097,7 +1107,7 @@ static struct mfd_cell ab8500_devs[] = { ...@@ -1097,7 +1107,7 @@ static struct mfd_cell ab8500_devs[] = {
.of_compatible = "stericsson,ab8500-denc", .of_compatible = "stericsson,ab8500-denc",
}, },
{ {
.name = "ab8500-gpio", .name = "pinctrl-ab8500",
.of_compatible = "stericsson,ab8500-gpio", .of_compatible = "stericsson,ab8500-gpio",
}, },
{ {
...@@ -1208,6 +1218,7 @@ static struct mfd_cell ab8505_devs[] = { ...@@ -1208,6 +1218,7 @@ static struct mfd_cell ab8505_devs[] = {
}, },
{ {
.name = "ab8500-gpadc", .name = "ab8500-gpadc",
.of_compatible = "stericsson,ab8500-gpadc",
.num_resources = ARRAY_SIZE(ab8505_gpadc_resources), .num_resources = ARRAY_SIZE(ab8505_gpadc_resources),
.resources = ab8505_gpadc_resources, .resources = ab8505_gpadc_resources,
}, },
...@@ -1234,7 +1245,7 @@ static struct mfd_cell ab8505_devs[] = { ...@@ -1234,7 +1245,7 @@ static struct mfd_cell ab8505_devs[] = {
.name = "ab8500-leds", .name = "ab8500-leds",
}, },
{ {
.name = "ab8500-gpio", .name = "pinctrl-ab8505",
}, },
{ {
.name = "ab8500-usb", .name = "ab8500-usb",
...@@ -1271,6 +1282,7 @@ static struct mfd_cell ab8540_devs[] = { ...@@ -1271,6 +1282,7 @@ static struct mfd_cell ab8540_devs[] = {
}, },
{ {
.name = "ab8500-gpadc", .name = "ab8500-gpadc",
.of_compatible = "stericsson,ab8500-gpadc",
.num_resources = ARRAY_SIZE(ab8505_gpadc_resources), .num_resources = ARRAY_SIZE(ab8505_gpadc_resources),
.resources = ab8505_gpadc_resources, .resources = ab8505_gpadc_resources,
}, },
...@@ -1302,7 +1314,7 @@ static struct mfd_cell ab8540_devs[] = { ...@@ -1302,7 +1314,7 @@ static struct mfd_cell ab8540_devs[] = {
.resources = ab8500_temp_resources, .resources = ab8500_temp_resources,
}, },
{ {
.name = "ab8500-gpio", .name = "pinctrl-ab8540",
}, },
{ {
.name = "ab8540-usb", .name = "ab8540-usb",
...@@ -1712,6 +1724,12 @@ static int ab8500_probe(struct platform_device *pdev) ...@@ -1712,6 +1724,12 @@ static int ab8500_probe(struct platform_device *pdev)
if (ret) if (ret)
return ret; return ret;
#if CONFIG_DEBUG_FS
/* Pass to debugfs */
ab8500_debug_resources[0].start = ab8500->irq;
ab8500_debug_resources[0].end = ab8500->irq;
#endif
if (is_ab9540(ab8500)) if (is_ab9540(ab8500))
ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs, ret = mfd_add_devices(ab8500->dev, 0, ab9540_devs,
ARRAY_SIZE(ab9540_devs), NULL, ARRAY_SIZE(ab9540_devs), NULL,
......
...@@ -91,12 +91,10 @@ ...@@ -91,12 +91,10 @@
#include <linux/ctype.h> #include <linux/ctype.h>
#endif #endif
/* TODO: this file should not reference IRQ_DB8500_AB8500! */
#include <mach/irqs.h>
static u32 debug_bank; static u32 debug_bank;
static u32 debug_address; static u32 debug_address;
static int irq_ab8500;
static int irq_first; static int irq_first;
static int irq_last; static int irq_last;
static u32 *irq_count; static u32 *irq_count;
...@@ -1589,7 +1587,7 @@ void ab8500_debug_register_interrupt(int line) ...@@ -1589,7 +1587,7 @@ void ab8500_debug_register_interrupt(int line)
{ {
if (line < num_interrupt_lines) { if (line < num_interrupt_lines) {
num_interrupts[line]++; num_interrupts[line]++;
if (suspend_test_wake_cause_interrupt_is_mine(IRQ_DB8500_AB8500)) if (suspend_test_wake_cause_interrupt_is_mine(irq_ab8500))
num_wake_interrupts[line]++; num_wake_interrupts[line]++;
} }
} }
...@@ -2941,6 +2939,7 @@ static int ab8500_debug_probe(struct platform_device *plf) ...@@ -2941,6 +2939,7 @@ static int ab8500_debug_probe(struct platform_device *plf)
struct dentry *file; struct dentry *file;
int ret = -ENOMEM; int ret = -ENOMEM;
struct ab8500 *ab8500; struct ab8500 *ab8500;
struct resource *res;
debug_bank = AB8500_MISC; debug_bank = AB8500_MISC;
debug_address = AB8500_REV_REG & 0x00FF; debug_address = AB8500_REV_REG & 0x00FF;
...@@ -2959,6 +2958,15 @@ static int ab8500_debug_probe(struct platform_device *plf) ...@@ -2959,6 +2958,15 @@ static int ab8500_debug_probe(struct platform_device *plf)
if (!event_name) if (!event_name)
goto out_freedev_attr; goto out_freedev_attr;
res = platform_get_resource_byname(plf, 0, "IRQ_AB8500");
if (!res) {
dev_err(&plf->dev, "AB8500 irq not found, err %d\n",
irq_first);
ret = -ENXIO;
goto out_freeevent_name;
}
irq_ab8500 = res->start;
irq_first = platform_get_irq_byname(plf, "IRQ_FIRST"); irq_first = platform_get_irq_byname(plf, "IRQ_FIRST");
if (irq_first < 0) { if (irq_first < 0) {
dev_err(&plf->dev, "First irq not found, err %d\n", dev_err(&plf->dev, "First irq not found, err %d\n",
......
...@@ -907,14 +907,17 @@ static int ab8500_gpadc_suspend(struct device *dev) ...@@ -907,14 +907,17 @@ static int ab8500_gpadc_suspend(struct device *dev)
static int ab8500_gpadc_resume(struct device *dev) static int ab8500_gpadc_resume(struct device *dev)
{ {
struct ab8500_gpadc *gpadc = dev_get_drvdata(dev); struct ab8500_gpadc *gpadc = dev_get_drvdata(dev);
int ret;
regulator_enable(gpadc->regu); ret = regulator_enable(gpadc->regu);
if (ret)
dev_err(dev, "Failed to enable vtvout LDO: %d\n", ret);
pm_runtime_mark_last_busy(gpadc->dev); pm_runtime_mark_last_busy(gpadc->dev);
pm_runtime_put_autosuspend(gpadc->dev); pm_runtime_put_autosuspend(gpadc->dev);
mutex_unlock(&gpadc->ab8500_gpadc_lock); mutex_unlock(&gpadc->ab8500_gpadc_lock);
return 0; return ret;
} }
static int ab8500_gpadc_probe(struct platform_device *pdev) static int ab8500_gpadc_probe(struct platform_device *pdev)
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
static struct device *sysctrl_dev; static struct device *sysctrl_dev;
void ab8500_power_off(void) static void ab8500_power_off(void)
{ {
sigset_t old; sigset_t old;
sigset_t all; sigset_t all;
...@@ -104,7 +104,7 @@ void ab8500_restart(char mode, const char *cmd) ...@@ -104,7 +104,7 @@ void ab8500_restart(char mode, const char *cmd)
plat = dev_get_platdata(sysctrl_dev->parent); plat = dev_get_platdata(sysctrl_dev->parent);
pdata = plat->sysctrl; pdata = plat->sysctrl;
if (pdata->reboot_reason_code) if (pdata && pdata->reboot_reason_code)
reason = pdata->reboot_reason_code(cmd); reason = pdata->reboot_reason_code(cmd);
else else
pr_warn("[%s] No reboot reason set. Default reason %d\n", pr_warn("[%s] No reboot reason set. Default reason %d\n",
...@@ -188,14 +188,15 @@ static int ab8500_sysctrl_probe(struct platform_device *pdev) ...@@ -188,14 +188,15 @@ static int ab8500_sysctrl_probe(struct platform_device *pdev)
plat = dev_get_platdata(pdev->dev.parent); plat = dev_get_platdata(pdev->dev.parent);
if (!(plat && plat->sysctrl)) if (!plat)
return -EINVAL; return -EINVAL;
if (plat->pm_power_off) sysctrl_dev = &pdev->dev;
if (!pm_power_off)
pm_power_off = ab8500_power_off; pm_power_off = ab8500_power_off;
pdata = plat->sysctrl; pdata = plat->sysctrl;
if (pdata) { if (pdata) {
int last, ret, i, j; int last, ret, i, j;
...@@ -226,6 +227,10 @@ static int ab8500_sysctrl_probe(struct platform_device *pdev) ...@@ -226,6 +227,10 @@ static int ab8500_sysctrl_probe(struct platform_device *pdev)
static int ab8500_sysctrl_remove(struct platform_device *pdev) static int ab8500_sysctrl_remove(struct platform_device *pdev)
{ {
sysctrl_dev = NULL; sysctrl_dev = NULL;
if (pm_power_off == ab8500_power_off)
pm_power_off = NULL;
return 0; return 0;
} }
......
...@@ -156,7 +156,7 @@ EXPORT_SYMBOL(abx500_startup_irq_enabled); ...@@ -156,7 +156,7 @@ EXPORT_SYMBOL(abx500_startup_irq_enabled);
void abx500_dump_all_banks(void) void abx500_dump_all_banks(void)
{ {
struct abx500_ops *ops; struct abx500_ops *ops;
struct device dummy_child = {0}; struct device dummy_child = {NULL};
struct abx500_device_entry *dev_entry; struct abx500_device_entry *dev_entry;
list_for_each_entry(dev_entry, &abx500_list, list) { list_for_each_entry(dev_entry, &abx500_list, list) {
......
...@@ -120,7 +120,7 @@ static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev, ...@@ -120,7 +120,7 @@ static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev,
for (end = ptr + EC_MSG_PREAMBLE_COUNT; ptr != end; ptr++) { for (end = ptr + EC_MSG_PREAMBLE_COUNT; ptr != end; ptr++) {
if (*ptr == EC_MSG_HEADER) { if (*ptr == EC_MSG_HEADER) {
dev_dbg(ec_dev->dev, "msg found at %ld\n", dev_dbg(ec_dev->dev, "msg found at %zd\n",
ptr - ec_dev->din); ptr - ec_dev->din);
break; break;
} }
...@@ -154,7 +154,7 @@ static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev, ...@@ -154,7 +154,7 @@ static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev,
* maximum-supported transfer size. * maximum-supported transfer size.
*/ */
todo = min(need_len, 256); todo = min(need_len, 256);
dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%ld\n", dev_dbg(ec_dev->dev, "loop, todo=%d, need_len=%d, ptr=%zd\n",
todo, need_len, ptr - ec_dev->din); todo, need_len, ptr - ec_dev->din);
memset(&trans, '\0', sizeof(trans)); memset(&trans, '\0', sizeof(trans));
...@@ -178,7 +178,7 @@ static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev, ...@@ -178,7 +178,7 @@ static int cros_ec_spi_receive_response(struct cros_ec_device *ec_dev,
need_len -= todo; need_len -= todo;
} }
dev_dbg(ec_dev->dev, "loop done, ptr=%ld\n", ptr - ec_dev->din); dev_dbg(ec_dev->dev, "loop done, ptr=%zd\n", ptr - ec_dev->din);
return 0; return 0;
} }
......
...@@ -1613,6 +1613,8 @@ static unsigned long dsiclk_rate(u8 n) ...@@ -1613,6 +1613,8 @@ static unsigned long dsiclk_rate(u8 n)
if (divsel == PRCM_DSI_PLLOUT_SEL_OFF) if (divsel == PRCM_DSI_PLLOUT_SEL_OFF)
divsel = dsiclk[n].divsel; divsel = dsiclk[n].divsel;
else
dsiclk[n].divsel = divsel;
switch (divsel) { switch (divsel) {
case PRCM_DSI_PLLOUT_SEL_PHI_4: case PRCM_DSI_PLLOUT_SEL_PHI_4:
...@@ -3095,6 +3097,7 @@ static struct mfd_cell db8500_prcmu_devs[] = { ...@@ -3095,6 +3097,7 @@ static struct mfd_cell db8500_prcmu_devs[] = {
.num_resources = ARRAY_SIZE(db8500_thsens_resources), .num_resources = ARRAY_SIZE(db8500_thsens_resources),
.resources = db8500_thsens_resources, .resources = db8500_thsens_resources,
.platform_data = &db8500_thsens_data, .platform_data = &db8500_thsens_data,
.pdata_size = sizeof(db8500_thsens_data),
}, },
}; };
......
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
#include <linux/mfd/si476x-core.h> #include <linux/mfd/si476x-core.h>
#include <asm/unaligned.h>
#define msb(x) ((u8)((u16) x >> 8)) #define msb(x) ((u8)((u16) x >> 8))
#define lsb(x) ((u8)((u16) x & 0x00FF)) #define lsb(x) ((u8)((u16) x & 0x00FF))
...@@ -150,7 +152,7 @@ enum si476x_acf_status_report_bits { ...@@ -150,7 +152,7 @@ enum si476x_acf_status_report_bits {
SI476X_ACF_SOFTMUTE_INT = (1 << 0), SI476X_ACF_SOFTMUTE_INT = (1 << 0),
SI476X_ACF_SMUTE = (1 << 0), SI476X_ACF_SMUTE = (1 << 0),
SI476X_ACF_SMATTN = 0b11111, SI476X_ACF_SMATTN = 0x1f,
SI476X_ACF_PILOT = (1 << 7), SI476X_ACF_PILOT = (1 << 7),
SI476X_ACF_STBLEND = ~SI476X_ACF_PILOT, SI476X_ACF_STBLEND = ~SI476X_ACF_PILOT,
}; };
...@@ -483,7 +485,7 @@ int si476x_core_cmd_get_property(struct si476x_core *core, u16 property) ...@@ -483,7 +485,7 @@ int si476x_core_cmd_get_property(struct si476x_core *core, u16 property)
if (err < 0) if (err < 0)
return err; return err;
else else
return be16_to_cpup((__be16 *)(resp + 2)); return get_unaligned_be16(resp + 2);
} }
EXPORT_SYMBOL_GPL(si476x_core_cmd_get_property); EXPORT_SYMBOL_GPL(si476x_core_cmd_get_property);
...@@ -772,18 +774,18 @@ int si476x_core_cmd_am_rsq_status(struct si476x_core *core, ...@@ -772,18 +774,18 @@ int si476x_core_cmd_am_rsq_status(struct si476x_core *core,
if (!report) if (!report)
return err; return err;
report->snrhint = 0b00001000 & resp[1]; report->snrhint = 0x08 & resp[1];
report->snrlint = 0b00000100 & resp[1]; report->snrlint = 0x04 & resp[1];
report->rssihint = 0b00000010 & resp[1]; report->rssihint = 0x02 & resp[1];
report->rssilint = 0b00000001 & resp[1]; report->rssilint = 0x01 & resp[1];
report->bltf = 0b10000000 & resp[2]; report->bltf = 0x80 & resp[2];
report->snr_ready = 0b00100000 & resp[2]; report->snr_ready = 0x20 & resp[2];
report->rssiready = 0b00001000 & resp[2]; report->rssiready = 0x08 & resp[2];
report->afcrl = 0b00000010 & resp[2]; report->afcrl = 0x02 & resp[2];
report->valid = 0b00000001 & resp[2]; report->valid = 0x01 & resp[2];
report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); report->readfreq = get_unaligned_be16(resp + 3);
report->freqoff = resp[5]; report->freqoff = resp[5];
report->rssi = resp[6]; report->rssi = resp[6];
report->snr = resp[7]; report->snr = resp[7];
...@@ -931,26 +933,26 @@ int si476x_core_cmd_fm_rds_status(struct si476x_core *core, ...@@ -931,26 +933,26 @@ int si476x_core_cmd_fm_rds_status(struct si476x_core *core,
if (err < 0 || report == NULL) if (err < 0 || report == NULL)
return err; return err;
report->rdstpptyint = 0b00010000 & resp[1]; report->rdstpptyint = 0x10 & resp[1];
report->rdspiint = 0b00001000 & resp[1]; report->rdspiint = 0x08 & resp[1];
report->rdssyncint = 0b00000010 & resp[1]; report->rdssyncint = 0x02 & resp[1];
report->rdsfifoint = 0b00000001 & resp[1]; report->rdsfifoint = 0x01 & resp[1];
report->tpptyvalid = 0b00010000 & resp[2]; report->tpptyvalid = 0x10 & resp[2];
report->pivalid = 0b00001000 & resp[2]; report->pivalid = 0x08 & resp[2];
report->rdssync = 0b00000010 & resp[2]; report->rdssync = 0x02 & resp[2];
report->rdsfifolost = 0b00000001 & resp[2]; report->rdsfifolost = 0x01 & resp[2];
report->tp = 0b00100000 & resp[3]; report->tp = 0x20 & resp[3];
report->pty = 0b00011111 & resp[3]; report->pty = 0x1f & resp[3];
report->pi = be16_to_cpup((__be16 *)(resp + 4)); report->pi = get_unaligned_be16(resp + 4);
report->rdsfifoused = resp[6]; report->rdsfifoused = resp[6];
report->ble[V4L2_RDS_BLOCK_A] = 0b11000000 & resp[7]; report->ble[V4L2_RDS_BLOCK_A] = 0xc0 & resp[7];
report->ble[V4L2_RDS_BLOCK_B] = 0b00110000 & resp[7]; report->ble[V4L2_RDS_BLOCK_B] = 0x30 & resp[7];
report->ble[V4L2_RDS_BLOCK_C] = 0b00001100 & resp[7]; report->ble[V4L2_RDS_BLOCK_C] = 0x0c & resp[7];
report->ble[V4L2_RDS_BLOCK_D] = 0b00000011 & resp[7]; report->ble[V4L2_RDS_BLOCK_D] = 0x03 & resp[7];
report->rds[V4L2_RDS_BLOCK_A].block = V4L2_RDS_BLOCK_A; report->rds[V4L2_RDS_BLOCK_A].block = V4L2_RDS_BLOCK_A;
report->rds[V4L2_RDS_BLOCK_A].msb = resp[8]; report->rds[V4L2_RDS_BLOCK_A].msb = resp[8];
...@@ -991,9 +993,9 @@ int si476x_core_cmd_fm_rds_blockcount(struct si476x_core *core, ...@@ -991,9 +993,9 @@ int si476x_core_cmd_fm_rds_blockcount(struct si476x_core *core,
SI476X_DEFAULT_TIMEOUT); SI476X_DEFAULT_TIMEOUT);
if (!err) { if (!err) {
report->expected = be16_to_cpup((__be16 *)(resp + 2)); report->expected = get_unaligned_be16(resp + 2);
report->received = be16_to_cpup((__be16 *)(resp + 4)); report->received = get_unaligned_be16(resp + 4);
report->uncorrectable = be16_to_cpup((__be16 *)(resp + 6)); report->uncorrectable = get_unaligned_be16(resp + 6);
} }
return err; return err;
...@@ -1005,7 +1007,7 @@ int si476x_core_cmd_fm_phase_diversity(struct si476x_core *core, ...@@ -1005,7 +1007,7 @@ int si476x_core_cmd_fm_phase_diversity(struct si476x_core *core,
{ {
u8 resp[CMD_FM_PHASE_DIVERSITY_NRESP]; u8 resp[CMD_FM_PHASE_DIVERSITY_NRESP];
const u8 args[CMD_FM_PHASE_DIVERSITY_NARGS] = { const u8 args[CMD_FM_PHASE_DIVERSITY_NARGS] = {
mode & 0b111, mode & 0x07,
}; };
return si476x_core_send_command(core, CMD_FM_PHASE_DIVERSITY, return si476x_core_send_command(core, CMD_FM_PHASE_DIVERSITY,
...@@ -1162,7 +1164,7 @@ static int si476x_core_cmd_am_tune_freq_a20(struct si476x_core *core, ...@@ -1162,7 +1164,7 @@ static int si476x_core_cmd_am_tune_freq_a20(struct si476x_core *core,
const int am_freq = tuneargs->freq; const int am_freq = tuneargs->freq;
u8 resp[CMD_AM_TUNE_FREQ_NRESP]; u8 resp[CMD_AM_TUNE_FREQ_NRESP];
const u8 args[CMD_AM_TUNE_FREQ_NARGS] = { const u8 args[CMD_AM_TUNE_FREQ_NARGS] = {
(tuneargs->zifsr << 6) | (tuneargs->injside & 0b11), (tuneargs->zifsr << 6) | (tuneargs->injside & 0x03),
msb(am_freq), msb(am_freq),
lsb(am_freq), lsb(am_freq),
}; };
...@@ -1197,20 +1199,20 @@ static int si476x_core_cmd_fm_rsq_status_a10(struct si476x_core *core, ...@@ -1197,20 +1199,20 @@ static int si476x_core_cmd_fm_rsq_status_a10(struct si476x_core *core,
if (err < 0 || report == NULL) if (err < 0 || report == NULL)
return err; return err;
report->multhint = 0b10000000 & resp[1]; report->multhint = 0x80 & resp[1];
report->multlint = 0b01000000 & resp[1]; report->multlint = 0x40 & resp[1];
report->snrhint = 0b00001000 & resp[1]; report->snrhint = 0x08 & resp[1];
report->snrlint = 0b00000100 & resp[1]; report->snrlint = 0x04 & resp[1];
report->rssihint = 0b00000010 & resp[1]; report->rssihint = 0x02 & resp[1];
report->rssilint = 0b00000001 & resp[1]; report->rssilint = 0x01 & resp[1];
report->bltf = 0b10000000 & resp[2]; report->bltf = 0x80 & resp[2];
report->snr_ready = 0b00100000 & resp[2]; report->snr_ready = 0x20 & resp[2];
report->rssiready = 0b00001000 & resp[2]; report->rssiready = 0x08 & resp[2];
report->afcrl = 0b00000010 & resp[2]; report->afcrl = 0x02 & resp[2];
report->valid = 0b00000001 & resp[2]; report->valid = 0x01 & resp[2];
report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); report->readfreq = get_unaligned_be16(resp + 3);
report->freqoff = resp[5]; report->freqoff = resp[5];
report->rssi = resp[6]; report->rssi = resp[6];
report->snr = resp[7]; report->snr = resp[7];
...@@ -1218,7 +1220,7 @@ static int si476x_core_cmd_fm_rsq_status_a10(struct si476x_core *core, ...@@ -1218,7 +1220,7 @@ static int si476x_core_cmd_fm_rsq_status_a10(struct si476x_core *core,
report->hassi = resp[10]; report->hassi = resp[10];
report->mult = resp[11]; report->mult = resp[11];
report->dev = resp[12]; report->dev = resp[12];
report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); report->readantcap = get_unaligned_be16(resp + 13);
report->assi = resp[15]; report->assi = resp[15];
report->usn = resp[16]; report->usn = resp[16];
...@@ -1251,20 +1253,20 @@ static int si476x_core_cmd_fm_rsq_status_a20(struct si476x_core *core, ...@@ -1251,20 +1253,20 @@ static int si476x_core_cmd_fm_rsq_status_a20(struct si476x_core *core,
if (err < 0 || report == NULL) if (err < 0 || report == NULL)
return err; return err;
report->multhint = 0b10000000 & resp[1]; report->multhint = 0x80 & resp[1];
report->multlint = 0b01000000 & resp[1]; report->multlint = 0x40 & resp[1];
report->snrhint = 0b00001000 & resp[1]; report->snrhint = 0x08 & resp[1];
report->snrlint = 0b00000100 & resp[1]; report->snrlint = 0x04 & resp[1];
report->rssihint = 0b00000010 & resp[1]; report->rssihint = 0x02 & resp[1];
report->rssilint = 0b00000001 & resp[1]; report->rssilint = 0x01 & resp[1];
report->bltf = 0b10000000 & resp[2]; report->bltf = 0x80 & resp[2];
report->snr_ready = 0b00100000 & resp[2]; report->snr_ready = 0x20 & resp[2];
report->rssiready = 0b00001000 & resp[2]; report->rssiready = 0x08 & resp[2];
report->afcrl = 0b00000010 & resp[2]; report->afcrl = 0x02 & resp[2];
report->valid = 0b00000001 & resp[2]; report->valid = 0x01 & resp[2];
report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); report->readfreq = get_unaligned_be16(resp + 3);
report->freqoff = resp[5]; report->freqoff = resp[5];
report->rssi = resp[6]; report->rssi = resp[6];
report->snr = resp[7]; report->snr = resp[7];
...@@ -1272,7 +1274,7 @@ static int si476x_core_cmd_fm_rsq_status_a20(struct si476x_core *core, ...@@ -1272,7 +1274,7 @@ static int si476x_core_cmd_fm_rsq_status_a20(struct si476x_core *core,
report->hassi = resp[10]; report->hassi = resp[10];
report->mult = resp[11]; report->mult = resp[11];
report->dev = resp[12]; report->dev = resp[12];
report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); report->readantcap = get_unaligned_be16(resp + 13);
report->assi = resp[15]; report->assi = resp[15];
report->usn = resp[16]; report->usn = resp[16];
...@@ -1306,21 +1308,21 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core, ...@@ -1306,21 +1308,21 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core,
if (err < 0 || report == NULL) if (err < 0 || report == NULL)
return err; return err;
report->multhint = 0b10000000 & resp[1]; report->multhint = 0x80 & resp[1];
report->multlint = 0b01000000 & resp[1]; report->multlint = 0x40 & resp[1];
report->snrhint = 0b00001000 & resp[1]; report->snrhint = 0x08 & resp[1];
report->snrlint = 0b00000100 & resp[1]; report->snrlint = 0x04 & resp[1];
report->rssihint = 0b00000010 & resp[1]; report->rssihint = 0x02 & resp[1];
report->rssilint = 0b00000001 & resp[1]; report->rssilint = 0x01 & resp[1];
report->bltf = 0b10000000 & resp[2]; report->bltf = 0x80 & resp[2];
report->snr_ready = 0b00100000 & resp[2]; report->snr_ready = 0x20 & resp[2];
report->rssiready = 0b00001000 & resp[2]; report->rssiready = 0x08 & resp[2];
report->injside = 0b00000100 & resp[2]; report->injside = 0x04 & resp[2];
report->afcrl = 0b00000010 & resp[2]; report->afcrl = 0x02 & resp[2];
report->valid = 0b00000001 & resp[2]; report->valid = 0x01 & resp[2];
report->readfreq = be16_to_cpup((__be16 *)(resp + 3)); report->readfreq = get_unaligned_be16(resp + 3);
report->freqoff = resp[5]; report->freqoff = resp[5];
report->rssi = resp[6]; report->rssi = resp[6];
report->snr = resp[7]; report->snr = resp[7];
...@@ -1329,7 +1331,7 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core, ...@@ -1329,7 +1331,7 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core,
report->hassi = resp[10]; report->hassi = resp[10];
report->mult = resp[11]; report->mult = resp[11];
report->dev = resp[12]; report->dev = resp[12];
report->readantcap = be16_to_cpup((__be16 *)(resp + 13)); report->readantcap = get_unaligned_be16(resp + 13);
report->assi = resp[15]; report->assi = resp[15];
report->usn = resp[16]; report->usn = resp[16];
...@@ -1337,7 +1339,7 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core, ...@@ -1337,7 +1339,7 @@ static int si476x_core_cmd_fm_rsq_status_a30(struct si476x_core *core,
report->rdsdev = resp[18]; report->rdsdev = resp[18];
report->assidev = resp[19]; report->assidev = resp[19];
report->strongdev = resp[20]; report->strongdev = resp[20];
report->rdspi = be16_to_cpup((__be16 *)(resp + 21)); report->rdspi = get_unaligned_be16(resp + 21);
return err; return err;
} }
......
...@@ -373,13 +373,11 @@ struct ab8500_sysctrl_platform_data; ...@@ -373,13 +373,11 @@ struct ab8500_sysctrl_platform_data;
/** /**
* struct ab8500_platform_data - AB8500 platform data * struct ab8500_platform_data - AB8500 platform data
* @irq_base: start of AB8500 IRQs, AB8500_NR_IRQS will be used * @irq_base: start of AB8500 IRQs, AB8500_NR_IRQS will be used
* @pm_power_off: Should machine pm power off hook be registered or not
* @init: board-specific initialization after detection of ab8500 * @init: board-specific initialization after detection of ab8500
* @regulator: machine-specific constraints for regulators * @regulator: machine-specific constraints for regulators
*/ */
struct ab8500_platform_data { struct ab8500_platform_data {
int irq_base; int irq_base;
bool pm_power_off;
void (*init) (struct ab8500 *); void (*init) (struct ab8500 *);
struct ab8500_regulator_platform_data *regulator; struct ab8500_regulator_platform_data *regulator;
struct abx500_gpio_platform_data *gpio; struct abx500_gpio_platform_data *gpio;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment