lochnagar
int lochnagar_update_config(struct lochnagar *lochnagar)
struct regmap *regmap = lochnagar->regmap;
lockdep_assert_held(&lochnagar->analogue_config_lock);
if (lochnagar->type != LOCHNAGAR2)
struct lochnagar *lochnagar;
lochnagar = devm_kzalloc(dev, sizeof(*lochnagar), GFP_KERNEL);
if (!lochnagar)
lochnagar->dev = dev;
mutex_init(&lochnagar->analogue_config_lock);
dev_set_drvdata(dev, lochnagar);
lochnagar->type = config->type;
lochnagar->regmap = devm_regmap_init_i2c(i2c, config->regmap);
if (IS_ERR(lochnagar->regmap)) {
ret = PTR_ERR(lochnagar->regmap);
ret = lochnagar_wait_for_boot(lochnagar->regmap, &val);
ret = regmap_read(lochnagar->regmap, LOCHNAGAR_FIRMWARE_ID1, &val);
ret = regmap_read(lochnagar->regmap, LOCHNAGAR_FIRMWARE_ID2, &val);
ret = regmap_register_patch(lochnagar->regmap, config->patch,
struct lochnagar *lochnagar = priv->lochnagar;
return regmap_update_bits(lochnagar->regmap, pin->reg,
struct lochnagar *lochnagar = dev_get_drvdata(pdev->dev.parent);
priv->lochnagar = lochnagar;
switch (lochnagar->type) {
dev_err(dev, "Unknown Lochnagar type: %d\n", lochnagar->type);
LN_FUNC(lochnagar##REV##_##ID##_pin.name, PIN, OP)
LN_FUNC(lochnagar##REV##_##ID##_aif.name, AIF, OP)
static const struct lochnagar_pin lochnagar##REV##_##ID##_pin = { \
static const struct lochnagar_pin lochnagar##REV##_##ID##_pin = \
.name = lochnagar##REV##_##ID##_pin.name, \
.pins = &lochnagar##REV##_pins[LOCHNAGAR##REV##_PIN_##ID].number, \
.priv = &lochnagar##REV##_pins[LOCHNAGAR##REV##_PIN_##ID], \
.name = lochnagar##REV##_##ID##_aif.name, \
.pins = lochnagar##REV##_##ID##_aif.pins, \
.npins = ARRAY_SIZE(lochnagar##REV##_##ID##_aif.pins), \
.priv = &lochnagar##REV##_##ID##_aif, \
struct lochnagar *lochnagar;
struct regmap *regmap = priv->lochnagar->regmap;
switch (priv->lochnagar->type) {
ret = regmap_write(priv->lochnagar->regmap, pin->reg, op);
struct regmap *regmap = priv->lochnagar->regmap;
struct lochnagar *lochnagar = priv->lochnagar;
if (lochnagar->type == LOCHNAGAR1 || pin->type != LN_PTYPE_MUX)
.name = lochnagar##REV##_##ID##_pin.name, \
.drv_data = (void *)&lochnagar##REV##_##ID##_pin, \
struct regmap *regmap = priv->lochnagar->regmap;
struct lochnagar *lochnagar = config->driver_data;
mutex_lock(&lochnagar->analogue_config_lock);
ret = regmap_update_bits(lochnagar->regmap,
mutex_unlock(&lochnagar->analogue_config_lock);
dev_err(lochnagar->dev,
struct lochnagar *lochnagar = dev_get_drvdata(dev->parent);
config.regmap = lochnagar->regmap;
config.driver_data = lochnagar;
struct lochnagar *lochnagar = rdev_get_drvdata(rdev);
mutex_lock(&lochnagar->analogue_config_lock);
ret = lochnagar_update_config(lochnagar);
mutex_unlock(&lochnagar->analogue_config_lock);
struct lochnagar *lochnagar = rdev_get_drvdata(rdev);
mutex_lock(&lochnagar->analogue_config_lock);
ret = lochnagar_update_config(lochnagar);
mutex_unlock(&lochnagar->analogue_config_lock);
int lochnagar_update_config(struct lochnagar *lochnagar);