usb_dev: Implement read_packet() callback

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Update qiprog submodule

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Add helper functions for manipulating JEDEC-compliant chips

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Stellaris: Link to JEDEC helper functions

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Stellaris: Implement preliminary 'writen' member in LPC driver

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Stellaris: Do not use a libopencm3 callback for OUT packets

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Stellaris: Do not enable Tx or Rx USB interrupts

Only the control endpoint is interrupt-driven, while the bulk endpoints are
polled. There's no need to enable interrupts for other endpoints, so keep
them disabled.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Stelalris: Use the JEDEC probing sequence in LPC driver

Use jedec_probe for identifying the flash chip. This should be more
reliable than the previous method of probing an address which may or may
not be supported by the chip.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
jedec: Do not return an error when no chip is found

Returning an error code other than QIPROG_SUCCESS has interesting
consequences. The endpoint will be stalled and the control transaction
aborted. Instead of getting a QIPROG_ID_INVALID, the host gets an error.
Both these cases indicate that a chip was not identified, but the stalled
endpoint situation could also indicate an error with the VultureProg
device.

Since it is possible to respond to the read_chip_id request even when no chip
is found, always respond with QIPROG_ID_INVALID instead of an error code.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>