static int cti_create_con_attr_set()

in coresight/coresight-cti-sysfs.c [1100:1152]


static int cti_create_con_attr_set(struct device *dev, int con_idx,
				   struct cti_device *ctidev,
				   struct cti_trig_con *tc)
{
	struct attribute_group *attr_group = NULL;
	int attr_idx = 0;
	int err = -ENOMEM;

	attr_group = cti_create_con_sysfs_group(dev, ctidev, con_idx, tc);
	if (!attr_group)
		return -ENOMEM;

	/* allocate NULL terminated array of attributes */
	tc->con_attrs = devm_kcalloc(dev, CTI_CON_ATTR_MAX + 1,
				     sizeof(struct attribute *), GFP_KERNEL);
	if (!tc->con_attrs)
		return -ENOMEM;

	err = cti_create_con_sysfs_attr(dev, tc, CTI_CON_ATTR_NAME,
					attr_idx++);
	if (err)
		return err;

	if (tc->con_in->nr_sigs > 0) {
		err = cti_create_con_sysfs_attr(dev, tc,
						CTI_CON_ATTR_TRIGIN_SIG,
						attr_idx++);
		if (err)
			return err;

		err = cti_create_con_sysfs_attr(dev, tc,
						CTI_CON_ATTR_TRIGIN_TYPES,
						attr_idx++);
		if (err)
			return err;
	}

	if (tc->con_out->nr_sigs > 0) {
		err = cti_create_con_sysfs_attr(dev, tc,
						CTI_CON_ATTR_TRIGOUT_SIG,
						attr_idx++);
		if (err)
			return err;

		err = cti_create_con_sysfs_attr(dev, tc,
						CTI_CON_ATTR_TRIGOUT_TYPES,
						attr_idx++);
		if (err)
			return err;
	}
	attr_group->attrs = tc->con_attrs;
	return 0;
}