Loading drivers/base/regmap/internal.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -179,6 +179,9 @@ struct regmap_field { /* lsb */ /* lsb */ unsigned int shift; unsigned int shift; unsigned int reg; unsigned int reg; unsigned int id_size; unsigned int id_offset; }; }; #ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS Loading drivers/base/regmap/regmap.c +103 −0 Original line number Original line Diff line number Diff line Loading @@ -821,6 +821,8 @@ static void regmap_field_init(struct regmap_field *rm_field, rm_field->reg = reg_field.reg; rm_field->reg = reg_field.reg; rm_field->shift = reg_field.lsb; rm_field->shift = reg_field.lsb; rm_field->mask = ((BIT(field_bits) - 1) << reg_field.lsb); rm_field->mask = ((BIT(field_bits) - 1) << reg_field.lsb); rm_field->id_size = reg_field.id_size; rm_field->id_offset = reg_field.id_offset; } } /** /** Loading Loading @@ -1369,6 +1371,74 @@ int regmap_field_write(struct regmap_field *field, unsigned int val) } } EXPORT_SYMBOL_GPL(regmap_field_write); EXPORT_SYMBOL_GPL(regmap_field_write); /** * regmap_field_update_bits(): Perform a read/modify/write cycle * on the register field * * @field: Register field to write to * @mask: Bitmask to change * @val: Value to be written * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_field_update_bits(struct regmap_field *field, unsigned int mask, unsigned int val) { mask = (mask << field->shift) & field->mask; return regmap_update_bits(field->regmap, field->reg, mask, val << field->shift); } EXPORT_SYMBOL_GPL(regmap_field_update_bits); /** * regmap_fields_write(): Write a value to a single register field with port ID * * @field: Register field to write to * @id: port ID * @val: Value to be written * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_fields_write(struct regmap_field *field, unsigned int id, unsigned int val) { if (id >= field->id_size) return -EINVAL; return regmap_update_bits(field->regmap, field->reg + (field->id_offset * id), field->mask, val << field->shift); } EXPORT_SYMBOL_GPL(regmap_fields_write); /** * regmap_fields_update_bits(): Perform a read/modify/write cycle * on the register field * * @field: Register field to write to * @id: port ID * @mask: Bitmask to change * @val: Value to be written * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_fields_update_bits(struct regmap_field *field, unsigned int id, unsigned int mask, unsigned int val) { if (id >= field->id_size) return -EINVAL; mask = (mask << field->shift) & field->mask; return regmap_update_bits(field->regmap, field->reg + (field->id_offset * id), mask, val << field->shift); } EXPORT_SYMBOL_GPL(regmap_fields_update_bits); /* /* * regmap_bulk_write(): Write multiple registers to the device * regmap_bulk_write(): Write multiple registers to the device * * Loading Loading @@ -1676,6 +1746,39 @@ int regmap_field_read(struct regmap_field *field, unsigned int *val) } } EXPORT_SYMBOL_GPL(regmap_field_read); EXPORT_SYMBOL_GPL(regmap_field_read); /** * regmap_fields_read(): Read a value to a single register field with port ID * * @field: Register field to read from * @id: port ID * @val: Pointer to store read value * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_fields_read(struct regmap_field *field, unsigned int id, unsigned int *val) { int ret; unsigned int reg_val; if (id >= field->id_size) return -EINVAL; ret = regmap_read(field->regmap, field->reg + (field->id_offset * id), ®_val); if (ret != 0) return ret; reg_val &= field->mask; reg_val >>= field->shift; *val = reg_val; return ret; } EXPORT_SYMBOL_GPL(regmap_fields_read); /** /** * regmap_bulk_read(): Read multiple registers from the device * regmap_bulk_read(): Read multiple registers from the device * * Loading include/linux/regmap.h +13 −0 Original line number Original line Diff line number Diff line Loading @@ -425,11 +425,15 @@ bool regmap_reg_in_ranges(unsigned int reg, * @reg: Offset of the register within the regmap bank * @reg: Offset of the register within the regmap bank * @lsb: lsb of the register field. * @lsb: lsb of the register field. * @reg: msb of the register field. * @reg: msb of the register field. * @id_size: port size if it has some ports * @id_offset: address offset for each ports */ */ struct reg_field { struct reg_field { unsigned int reg; unsigned int reg; unsigned int lsb; unsigned int lsb; unsigned int msb; unsigned int msb; unsigned int id_size; unsigned int id_offset; }; }; #define REG_FIELD(_reg, _lsb, _msb) { \ #define REG_FIELD(_reg, _lsb, _msb) { \ Loading @@ -448,6 +452,15 @@ void devm_regmap_field_free(struct device *dev, struct regmap_field *field); int regmap_field_read(struct regmap_field *field, unsigned int *val); int regmap_field_read(struct regmap_field *field, unsigned int *val); int regmap_field_write(struct regmap_field *field, unsigned int val); int regmap_field_write(struct regmap_field *field, unsigned int val); int regmap_field_update_bits(struct regmap_field *field, unsigned int mask, unsigned int val); int regmap_fields_write(struct regmap_field *field, unsigned int id, unsigned int val); int regmap_fields_read(struct regmap_field *field, unsigned int id, unsigned int *val); int regmap_fields_update_bits(struct regmap_field *field, unsigned int id, unsigned int mask, unsigned int val); /** /** * Description of an IRQ for the generic regmap irq_chip. * Description of an IRQ for the generic regmap irq_chip. Loading include/sound/rcar_snd.h +0 −1 Original line number Original line Diff line number Diff line Loading @@ -36,7 +36,6 @@ #define RSND_SSI_CLK_PIN_SHARE (1 << 31) #define RSND_SSI_CLK_PIN_SHARE (1 << 31) #define RSND_SSI_CLK_FROM_ADG (1 << 30) /* clock parent is master */ #define RSND_SSI_CLK_FROM_ADG (1 << 30) /* clock parent is master */ #define RSND_SSI_SYNC (1 << 29) /* SSI34_sync etc */ #define RSND_SSI_SYNC (1 << 29) /* SSI34_sync etc */ #define RSND_SSI_DEPENDENT (1 << 28) /* SSI needs SRU/SCU */ #define RSND_SSI_PLAY (1 << 24) #define RSND_SSI_PLAY (1 << 24) Loading sound/soc/sh/Kconfig +0 −1 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,6 @@ config SND_SOC_SH4_SIU config SND_SOC_RCAR config SND_SOC_RCAR tristate "R-Car series SRU/SCU/SSIU/SSI support" tristate "R-Car series SRU/SCU/SSIU/SSI support" select SND_SIMPLE_CARD select SND_SIMPLE_CARD select RCAR_CLK_ADG help help This option enables R-Car SUR/SCU/SSIU/SSI sound support This option enables R-Car SUR/SCU/SSIU/SSI sound support Loading Loading
drivers/base/regmap/internal.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -179,6 +179,9 @@ struct regmap_field { /* lsb */ /* lsb */ unsigned int shift; unsigned int shift; unsigned int reg; unsigned int reg; unsigned int id_size; unsigned int id_offset; }; }; #ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS Loading
drivers/base/regmap/regmap.c +103 −0 Original line number Original line Diff line number Diff line Loading @@ -821,6 +821,8 @@ static void regmap_field_init(struct regmap_field *rm_field, rm_field->reg = reg_field.reg; rm_field->reg = reg_field.reg; rm_field->shift = reg_field.lsb; rm_field->shift = reg_field.lsb; rm_field->mask = ((BIT(field_bits) - 1) << reg_field.lsb); rm_field->mask = ((BIT(field_bits) - 1) << reg_field.lsb); rm_field->id_size = reg_field.id_size; rm_field->id_offset = reg_field.id_offset; } } /** /** Loading Loading @@ -1369,6 +1371,74 @@ int regmap_field_write(struct regmap_field *field, unsigned int val) } } EXPORT_SYMBOL_GPL(regmap_field_write); EXPORT_SYMBOL_GPL(regmap_field_write); /** * regmap_field_update_bits(): Perform a read/modify/write cycle * on the register field * * @field: Register field to write to * @mask: Bitmask to change * @val: Value to be written * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_field_update_bits(struct regmap_field *field, unsigned int mask, unsigned int val) { mask = (mask << field->shift) & field->mask; return regmap_update_bits(field->regmap, field->reg, mask, val << field->shift); } EXPORT_SYMBOL_GPL(regmap_field_update_bits); /** * regmap_fields_write(): Write a value to a single register field with port ID * * @field: Register field to write to * @id: port ID * @val: Value to be written * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_fields_write(struct regmap_field *field, unsigned int id, unsigned int val) { if (id >= field->id_size) return -EINVAL; return regmap_update_bits(field->regmap, field->reg + (field->id_offset * id), field->mask, val << field->shift); } EXPORT_SYMBOL_GPL(regmap_fields_write); /** * regmap_fields_update_bits(): Perform a read/modify/write cycle * on the register field * * @field: Register field to write to * @id: port ID * @mask: Bitmask to change * @val: Value to be written * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_fields_update_bits(struct regmap_field *field, unsigned int id, unsigned int mask, unsigned int val) { if (id >= field->id_size) return -EINVAL; mask = (mask << field->shift) & field->mask; return regmap_update_bits(field->regmap, field->reg + (field->id_offset * id), mask, val << field->shift); } EXPORT_SYMBOL_GPL(regmap_fields_update_bits); /* /* * regmap_bulk_write(): Write multiple registers to the device * regmap_bulk_write(): Write multiple registers to the device * * Loading Loading @@ -1676,6 +1746,39 @@ int regmap_field_read(struct regmap_field *field, unsigned int *val) } } EXPORT_SYMBOL_GPL(regmap_field_read); EXPORT_SYMBOL_GPL(regmap_field_read); /** * regmap_fields_read(): Read a value to a single register field with port ID * * @field: Register field to read from * @id: port ID * @val: Pointer to store read value * * A value of zero will be returned on success, a negative errno will * be returned in error cases. */ int regmap_fields_read(struct regmap_field *field, unsigned int id, unsigned int *val) { int ret; unsigned int reg_val; if (id >= field->id_size) return -EINVAL; ret = regmap_read(field->regmap, field->reg + (field->id_offset * id), ®_val); if (ret != 0) return ret; reg_val &= field->mask; reg_val >>= field->shift; *val = reg_val; return ret; } EXPORT_SYMBOL_GPL(regmap_fields_read); /** /** * regmap_bulk_read(): Read multiple registers from the device * regmap_bulk_read(): Read multiple registers from the device * * Loading
include/linux/regmap.h +13 −0 Original line number Original line Diff line number Diff line Loading @@ -425,11 +425,15 @@ bool regmap_reg_in_ranges(unsigned int reg, * @reg: Offset of the register within the regmap bank * @reg: Offset of the register within the regmap bank * @lsb: lsb of the register field. * @lsb: lsb of the register field. * @reg: msb of the register field. * @reg: msb of the register field. * @id_size: port size if it has some ports * @id_offset: address offset for each ports */ */ struct reg_field { struct reg_field { unsigned int reg; unsigned int reg; unsigned int lsb; unsigned int lsb; unsigned int msb; unsigned int msb; unsigned int id_size; unsigned int id_offset; }; }; #define REG_FIELD(_reg, _lsb, _msb) { \ #define REG_FIELD(_reg, _lsb, _msb) { \ Loading @@ -448,6 +452,15 @@ void devm_regmap_field_free(struct device *dev, struct regmap_field *field); int regmap_field_read(struct regmap_field *field, unsigned int *val); int regmap_field_read(struct regmap_field *field, unsigned int *val); int regmap_field_write(struct regmap_field *field, unsigned int val); int regmap_field_write(struct regmap_field *field, unsigned int val); int regmap_field_update_bits(struct regmap_field *field, unsigned int mask, unsigned int val); int regmap_fields_write(struct regmap_field *field, unsigned int id, unsigned int val); int regmap_fields_read(struct regmap_field *field, unsigned int id, unsigned int *val); int regmap_fields_update_bits(struct regmap_field *field, unsigned int id, unsigned int mask, unsigned int val); /** /** * Description of an IRQ for the generic regmap irq_chip. * Description of an IRQ for the generic regmap irq_chip. Loading
include/sound/rcar_snd.h +0 −1 Original line number Original line Diff line number Diff line Loading @@ -36,7 +36,6 @@ #define RSND_SSI_CLK_PIN_SHARE (1 << 31) #define RSND_SSI_CLK_PIN_SHARE (1 << 31) #define RSND_SSI_CLK_FROM_ADG (1 << 30) /* clock parent is master */ #define RSND_SSI_CLK_FROM_ADG (1 << 30) /* clock parent is master */ #define RSND_SSI_SYNC (1 << 29) /* SSI34_sync etc */ #define RSND_SSI_SYNC (1 << 29) /* SSI34_sync etc */ #define RSND_SSI_DEPENDENT (1 << 28) /* SSI needs SRU/SCU */ #define RSND_SSI_PLAY (1 << 24) #define RSND_SSI_PLAY (1 << 24) Loading
sound/soc/sh/Kconfig +0 −1 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,6 @@ config SND_SOC_SH4_SIU config SND_SOC_RCAR config SND_SOC_RCAR tristate "R-Car series SRU/SCU/SSIU/SSI support" tristate "R-Car series SRU/SCU/SSIU/SSI support" select SND_SIMPLE_CARD select SND_SIMPLE_CARD select RCAR_CLK_ADG help help This option enables R-Car SUR/SCU/SSIU/SSI sound support This option enables R-Car SUR/SCU/SSIU/SSI sound support Loading