aeslib: introduce user_data for write registers callback
aes2501 needs this for state tracking
This commit is contained in:
parent
6f08a3666d
commit
77b5dab04b
3 changed files with 12 additions and 9 deletions
|
@ -39,6 +39,7 @@ struct write_regv_data {
|
||||||
const struct aes_regwrite *regs;
|
const struct aes_regwrite *regs;
|
||||||
unsigned int offset;
|
unsigned int offset;
|
||||||
aes_write_regv_cb callback;
|
aes_write_regv_cb callback;
|
||||||
|
void *user_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void continue_write_regv(struct write_regv_data *wdata);
|
static void continue_write_regv(struct write_regv_data *wdata);
|
||||||
|
@ -56,9 +57,9 @@ static void write_regv_trf_complete(libusb_dev_handle *devh,
|
||||||
libusb_urb_handle_free(urbh);
|
libusb_urb_handle_free(urbh);
|
||||||
|
|
||||||
if (status != FP_URB_COMPLETED)
|
if (status != FP_URB_COMPLETED)
|
||||||
wdata->callback(wdata->imgdev, -EIO);
|
wdata->callback(wdata->imgdev, -EIO, wdata->user_data);
|
||||||
else if (rqlength != actual_length)
|
else if (rqlength != actual_length)
|
||||||
wdata->callback(wdata->imgdev, -EPROTO);
|
wdata->callback(wdata->imgdev, -EPROTO, wdata->user_data);
|
||||||
else
|
else
|
||||||
continue_write_regv(wdata);
|
continue_write_regv(wdata);
|
||||||
}
|
}
|
||||||
|
@ -110,7 +111,7 @@ static void continue_write_regv(struct write_regv_data *wdata)
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
if (offset >= wdata->num_regs) {
|
if (offset >= wdata->num_regs) {
|
||||||
fp_dbg("all registers written");
|
fp_dbg("all registers written");
|
||||||
wdata->callback(wdata->imgdev, 0);
|
wdata->callback(wdata->imgdev, 0, wdata->user_data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (wdata->regs[offset].reg)
|
if (wdata->regs[offset].reg)
|
||||||
|
@ -133,7 +134,7 @@ static void continue_write_regv(struct write_regv_data *wdata)
|
||||||
|
|
||||||
r = do_write_regv(wdata, upper_bound);
|
r = do_write_regv(wdata, upper_bound);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
wdata->callback(wdata->imgdev, r);
|
wdata->callback(wdata->imgdev, r, wdata->user_data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +145,7 @@ static void continue_write_regv(struct write_regv_data *wdata)
|
||||||
* single URB up to a limit. insert writes to non-existent register 0 to force
|
* single URB up to a limit. insert writes to non-existent register 0 to force
|
||||||
* specific groups of writes to be separated by different URBs. */
|
* specific groups of writes to be separated by different URBs. */
|
||||||
void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs,
|
void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs,
|
||||||
unsigned int num_regs, aes_write_regv_cb callback)
|
unsigned int num_regs, aes_write_regv_cb callback, void *user_data)
|
||||||
{
|
{
|
||||||
struct write_regv_data *wdata = g_malloc(sizeof(*wdata));
|
struct write_regv_data *wdata = g_malloc(sizeof(*wdata));
|
||||||
fp_dbg("write %d regs", num_regs);
|
fp_dbg("write %d regs", num_regs);
|
||||||
|
@ -153,6 +154,7 @@ void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs,
|
||||||
wdata->regs = regs;
|
wdata->regs = regs;
|
||||||
wdata->offset = 0;
|
wdata->offset = 0;
|
||||||
wdata->callback = callback;
|
wdata->callback = callback;
|
||||||
|
wdata->user_data = user_data;
|
||||||
continue_write_regv(wdata);
|
continue_write_regv(wdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,11 @@ struct aes_regwrite {
|
||||||
unsigned char value;
|
unsigned char value;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (*aes_write_regv_cb)(struct fp_img_dev *dev, int result);
|
typedef void (*aes_write_regv_cb)(struct fp_img_dev *dev, int result,
|
||||||
|
void *user_data);
|
||||||
|
|
||||||
void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs,
|
void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs,
|
||||||
unsigned int num_regs, aes_write_regv_cb callback);
|
unsigned int num_regs, aes_write_regv_cb callback, void *user_data);
|
||||||
|
|
||||||
void aes_assemble_image(unsigned char *input, size_t width, size_t height,
|
void aes_assemble_image(unsigned char *input, size_t width, size_t height,
|
||||||
unsigned char *output);
|
unsigned char *output);
|
||||||
|
|
|
@ -177,7 +177,7 @@ static void do_capture(struct fp_img_dev *dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_reqs_cb(struct fp_img_dev *dev, int result)
|
static void init_reqs_cb(struct fp_img_dev *dev, int result, void *user_data)
|
||||||
{
|
{
|
||||||
fpi_imgdev_activate_complete(dev, result);
|
fpi_imgdev_activate_complete(dev, result);
|
||||||
if (result == 0)
|
if (result == 0)
|
||||||
|
@ -186,7 +186,7 @@ static void init_reqs_cb(struct fp_img_dev *dev, int result)
|
||||||
|
|
||||||
static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state)
|
static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state)
|
||||||
{
|
{
|
||||||
aes_write_regv(dev, init_reqs, G_N_ELEMENTS(init_reqs), init_reqs_cb);
|
aes_write_regv(dev, init_reqs, G_N_ELEMENTS(init_reqs), init_reqs_cb, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue