Lines Matching +full:slave +full:- +full:dev

1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright(c) 2015-2020 Intel Corporation.
21 * Since we can't use ARRAY_SIZE, hard-code number of dpN attributes.
22 * This needs to be updated when adding new attributes - an error will be
28 static int field##_attribute_alloc(struct device *dev, \
35 dpn_attr = devm_kzalloc(dev, sizeof(*dpn_attr), GFP_KERNEL); \
37 return -ENOMEM; \
38 dpn_attr->N = N; \
39 dpn_attr->dir = dir; \
40 sysfs_attr_init(&dpn_attr->dev_attr.attr); \
41 dpn_attr->format_string = format_string; \
42 dpn_attr->dev_attr.attr.name = __stringify(field); \
43 dpn_attr->dev_attr.attr.mode = 0444; \
44 dpn_attr->dev_attr.show = field##_show; \
46 *res = &dpn_attr->dev_attr.attr; \
53 static ssize_t field##_dpn_show(struct sdw_slave *slave, \
65 dpn = slave->prop.src_dpn_prop; \
66 mask = slave->prop.source_ports; \
68 dpn = slave->prop.sink_dpn_prop; \
69 mask = slave->prop.sink_ports; \
80 return -EINVAL; \
83 static ssize_t field##_show(struct device *dev, \
87 struct sdw_slave *slave = dev_to_sdw_dev(dev); \
91 return field##_dpn_show(slave, \
92 dpn_attr->N, dpn_attr->dir, \
93 dpn_attr->format_string, \
113 static ssize_t field##_dpn_show(struct sdw_slave *slave, \
127 dpn = slave->prop.src_dpn_prop; \
128 mask = slave->prop.source_ports; \
130 dpn = slave->prop.sink_dpn_prop; \
131 mask = slave->prop.sink_ports; \
146 return -EINVAL; \
148 static ssize_t field##_show(struct device *dev, \
152 struct sdw_slave *slave = dev_to_sdw_dev(dev); \
156 return field##_dpn_show(slave, \
157 dpn_attr->N, dpn_attr->dir, \
158 dpn_attr->format_string, \
167 static int add_all_attributes(struct device *dev, int N, int dir) in add_all_attributes() argument
175 dpn_attrs = devm_kcalloc(dev, SDW_DPN_ATTRIBUTES + 1, in add_all_attributes()
179 return -ENOMEM; in add_all_attributes()
181 ret = max_word_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
186 ret = min_word_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
191 ret = words_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
196 ret = type_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
201 ret = max_grouping_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
206 ret = simple_ch_prep_sm_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
211 ret = ch_prep_timeout_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
216 ret = imp_def_interrupts_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
221 ret = min_ch_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
226 ret = max_ch_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
231 ret = channels_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
236 ret = ch_combinations_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
241 ret = max_async_buffer_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
246 ret = block_pack_mode_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
251 ret = port_encoding_attribute_alloc(dev, &dpn_attrs[i++], in add_all_attributes()
258 dev_err(dev, "mismatch in attributes, allocated %d got %d\n", in add_all_attributes()
260 return -EINVAL; in add_all_attributes()
263 dpn_group = devm_kzalloc(dev, sizeof(*dpn_group), GFP_KERNEL); in add_all_attributes()
265 return -ENOMEM; in add_all_attributes()
267 dpn_group->attrs = dpn_attrs; in add_all_attributes()
268 dpn_group->name = devm_kasprintf(dev, GFP_KERNEL, "dp%d_%s", in add_all_attributes()
270 if (!dpn_group->name) in add_all_attributes()
271 return -ENOMEM; in add_all_attributes()
273 ret = devm_device_add_group(dev, dpn_group); in add_all_attributes()
280 int sdw_slave_sysfs_dpn_init(struct sdw_slave *slave) in sdw_slave_sysfs_dpn_init() argument
286 mask = slave->prop.source_ports; in sdw_slave_sysfs_dpn_init()
288 ret = add_all_attributes(&slave->dev, i, 1); in sdw_slave_sysfs_dpn_init()
293 mask = slave->prop.sink_ports; in sdw_slave_sysfs_dpn_init()
295 ret = add_all_attributes(&slave->dev, i, 0); in sdw_slave_sysfs_dpn_init()