···1818- rcar_sound,src : Should contain SRC feature.1919 The number of SRC subnode should be same as HW.2020 see below for detail.2121+- rcar_sound,ctu : Should contain CTU feature.2222+ The number of CTU subnode should be same as HW.2323+ see below for detail.2424+- rcar_sound,mix : Should contain MIX feature.2525+ The number of MIX subnode should be same as HW.2626+ see below for detail.2127- rcar_sound,dvc : Should contain DVC feature.2228 The number of DVC subnode should be same as HW.2329 see below for detail.···9488 dmas = <&audma0 0xbe>;9589 dma-names = "tx";9690 };9191+ };9292+9393+ rcar_sound,mix {9494+ mix0: mix@0 { };9595+ mix1: mix@1 { };9696+ };9797+9898+ rcar_sound,ctu {9999+ ctu00: ctu@0 { };100100+ ctu01: ctu@1 { };101101+ ctu02: ctu@2 { };102102+ ctu03: ctu@3 { };103103+ ctu10: ctu@4 { };104104+ ctu11: ctu@5 { };105105+ ctu12: ctu@6 { };106106+ ctu13: ctu@7 { };97107 };9810899109 rcar_sound,src {
···6677- compatible : "renesas,rsrc-card,<board>"88 Examples with soctypes are:99+ - "renesas,rsrc-card"910 - "renesas,rsrc-card,lager"1011 - "renesas,rsrc-card,koelsch"1112Optional properties:···3029- frame-inversion : bool property. Add this if the3130 dai-link uses frame clock inversion.3231- convert-rate : platform specified sampling rate convert3232+- audio-prefix : see audio-routing3333+- audio-routing : A list of the connections between audio components.3434+ Each entry is a pair of strings, the first being the connection's sink,3535+ the second being the connection's source. Valid names for sources.3636+ use audio-prefix if some components is using same sink/sources naming.3737+ it can be used if compatible was "renesas,rsrc-card";33383439Required CPU/CODEC subnodes properties:3540
+1-1
drivers/base/regmap/internal.h
···136136 /* if set, the HW registers are known to match map->reg_defaults */137137 bool no_sync_defaults;138138139139- struct reg_default *patch;139139+ struct reg_sequence *patch;140140 int patch_regs;141141142142 /* if set, converts bulk rw to single rw */
+54-19
drivers/base/regmap/regmap.c
···34343535static int _regmap_update_bits(struct regmap *map, unsigned int reg,3636 unsigned int mask, unsigned int val,3737- bool *change);3737+ bool *change, bool force_write);38383939static int _regmap_bus_reg_read(void *context, unsigned int reg,4040 unsigned int *val);···11781178 ret = _regmap_update_bits(map, range->selector_reg,11791179 range->selector_mask,11801180 win_page << range->selector_shift,11811181- &page_chg);11811181+ &page_chg, false);1182118211831183 map->work_buf = orig_work_buf;11841184···16241624}16251625EXPORT_SYMBOL_GPL(regmap_fields_write);1626162616271627+int regmap_fields_force_write(struct regmap_field *field, unsigned int id,16281628+ unsigned int val)16291629+{16301630+ if (id >= field->id_size)16311631+ return -EINVAL;16321632+16331633+ return regmap_write_bits(field->regmap,16341634+ field->reg + (field->id_offset * id),16351635+ field->mask, val << field->shift);16361636+}16371637+EXPORT_SYMBOL_GPL(regmap_fields_force_write);16381638+16271639/**16281640 * regmap_fields_update_bits(): Perform a read/modify/write cycle16291641 * on the register field···17551743 * relative. The page register has been written if that was neccessary.17561744 */17571745static int _regmap_raw_multi_reg_write(struct regmap *map,17581758- const struct reg_default *regs,17461746+ const struct reg_sequence *regs,17591747 size_t num_regs)17601748{17611749 int ret;···18121800}1813180118141802static int _regmap_range_multi_paged_reg_write(struct regmap *map,18151815- struct reg_default *regs,18031803+ struct reg_sequence *regs,18161804 size_t num_regs)18171805{18181806 int ret;18191807 int i, n;18201820- struct reg_default *base;18081808+ struct reg_sequence *base;18211809 unsigned int this_page = 0;18221810 /*18231811 * the set of registers are not neccessarily in order, but···18551843}1856184418571845static int _regmap_multi_reg_write(struct regmap *map,18581858- const struct reg_default *regs,18461846+ const struct reg_sequence *regs,18591847 size_t num_regs)18601848{18611849 int i;···19071895 struct regmap_range_node *range;19081896 range = _regmap_range_lookup(map, reg);19091897 if (range) {19101910- size_t len = sizeof(struct reg_default)*num_regs;19111911- struct reg_default *base = kmemdup(regs, len,18981898+ size_t len = sizeof(struct reg_sequence)*num_regs;18991899+ struct reg_sequence *base = kmemdup(regs, len,19121900 GFP_KERNEL);19131901 if (!base)19141902 return -ENOMEM;···19411929 * A value of zero will be returned on success, a negative errno will be19421930 * returned in error cases.19431931 */19441944-int regmap_multi_reg_write(struct regmap *map, const struct reg_default *regs,19321932+int regmap_multi_reg_write(struct regmap *map, const struct reg_sequence *regs,19451933 int num_regs)19461934{19471935 int ret;···19741962 * be returned in error cases.19751963 */19761964int regmap_multi_reg_write_bypassed(struct regmap *map,19771977- const struct reg_default *regs,19651965+ const struct reg_sequence *regs,19781966 int num_regs)19791967{19801968 int ret;···2339232723402328static int _regmap_update_bits(struct regmap *map, unsigned int reg,23412329 unsigned int mask, unsigned int val,23422342- bool *change)23302330+ bool *change, bool force_write)23432331{23442332 int ret;23452333 unsigned int tmp, orig;···23512339 tmp = orig & ~mask;23522340 tmp |= val & mask;2353234123542354- if (tmp != orig) {23422342+ if (force_write || (tmp != orig)) {23552343 ret = _regmap_write(map, reg, tmp);23562344 if (change)23572345 *change = true;···23792367 int ret;2380236823812369 map->lock(map->lock_arg);23822382- ret = _regmap_update_bits(map, reg, mask, val, NULL);23702370+ ret = _regmap_update_bits(map, reg, mask, val, NULL, false);23832371 map->unlock(map->lock_arg);2384237223852373 return ret;23862374}23872375EXPORT_SYMBOL_GPL(regmap_update_bits);23762376+23772377+/**23782378+ * regmap_write_bits: Perform a read/modify/write cycle on the register map23792379+ *23802380+ * @map: Register map to update23812381+ * @reg: Register to update23822382+ * @mask: Bitmask to change23832383+ * @val: New value for bitmask23842384+ *23852385+ * Returns zero for success, a negative number on error.23862386+ */23872387+int regmap_write_bits(struct regmap *map, unsigned int reg,23882388+ unsigned int mask, unsigned int val)23892389+{23902390+ int ret;23912391+23922392+ map->lock(map->lock_arg);23932393+ ret = _regmap_update_bits(map, reg, mask, val, NULL, true);23942394+ map->unlock(map->lock_arg);23952395+23962396+ return ret;23972397+}23982398+EXPORT_SYMBOL_GPL(regmap_write_bits);2388239923892400/**23902401 * regmap_update_bits_async: Perform a read/modify/write cycle on the register···2433239824342399 map->async = true;2435240024362436- ret = _regmap_update_bits(map, reg, mask, val, NULL);24012401+ ret = _regmap_update_bits(map, reg, mask, val, NULL, false);2437240224382403 map->async = false;24392404···24622427 int ret;2463242824642429 map->lock(map->lock_arg);24652465- ret = _regmap_update_bits(map, reg, mask, val, change);24302430+ ret = _regmap_update_bits(map, reg, mask, val, change, false);24662431 map->unlock(map->lock_arg);24672432 return ret;24682433}···2495246024962461 map->async = true;2497246224982498- ret = _regmap_update_bits(map, reg, mask, val, change);24632463+ ret = _regmap_update_bits(map, reg, mask, val, change, false);2499246425002465 map->async = false;25012466···25872552 * The caller must ensure that this function cannot be called25882553 * concurrently with either itself or regcache_sync().25892554 */25902590-int regmap_register_patch(struct regmap *map, const struct reg_default *regs,25552555+int regmap_register_patch(struct regmap *map, const struct reg_sequence *regs,25912556 int num_regs)25922557{25932593- struct reg_default *p;25582558+ struct reg_sequence *p;25942559 int ret;25952560 bool bypass;25962561···25992564 return 0;2600256526012566 p = krealloc(map->patch,26022602- sizeof(struct reg_default) * (map->patch_regs + num_regs),25672567+ sizeof(struct reg_sequence) * (map->patch_regs + num_regs),26032568 GFP_KERNEL);26042569 if (p) {26052570 memcpy(p + map->patch_regs, regs, num_regs * sizeof(*regs));