static int process_sigma_actions(struct sigma_firmware *ssfw) { struct sigma_action *sa; size_t size; int ret; while (ssfw->pos + sizeof(*sa) <= ssfw->fw->size) { sa = (struct sigma_action *)(ssfw->fw->data + ssfw->pos); size = sigma_action_size(sa); ssfw->pos += size; if (ssfw->pos > ssfw->fw->size || size == 0) break; ret = process_sigma_action(ssfw, sa); pr_debug("%s: action returned %i\n", __func__, ret); if (ret <= 0) return ret; } if (ssfw->pos != ssfw->fw->size) return -EINVAL; return 0; }
static int process_sigma_actions(struct i2c_client *client, struct sigma_firmware *ssfw) { pr_debug("%s: processing %p\n", __func__, ssfw); while (1) { int ret = process_sigma_action(client, ssfw); pr_debug("%s: action returned %i\n", __func__, ret); if (ret == 1) return 0; else if (ret) return ret; } }