[PATCH v4 0/2] Fix idle port disconnects and firmware downloading

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: "Peter E. Berger" <pberger@xxxxxxxxxxx>

I found that when using newer Edgeport devices such as the EP/416,
idle ports are regularly bounced (disconnected and then reconnected).
I discussed this with the manufacturer (Digi International) and learned
that some newer Edgeport devices now ship from the factory running
firmware that requires periodic heartbeat messages from the driver, so
I enclose a proposed patch which implements their suggested mechanism
(which works both with old and new Edgeport devices).

While developing my heartbeat patch, I discovered that the firmware
download code was not working properly, so I include a second proposed
patch to fix this.

I welcome any comments or suggestions.

Thanks.
     --Peter

Changes since v3 [1]
Addressing Johan's review comments.  Thanks Johan!

Note: For v4 I've switched the order of the two patches, since the "Add
heartbeat..." patch now uses the firmware version number (in deciding
whether to schedule heartbeats for a particular device), which is decoded
in the "Fix Edgeport firmware download..." patch.

* Patch 1: "USB: io_ti: Fix Edgeport firmware download code"
  * Remove wrap_request_firmware() and its three invocations,
    and reorganize the code to instead call request_firmware() in
    edge_startup(); pass the image to download_fw() and
    build_i2c_fw_hdr(); and release it on return from download_fw().
  * Drop __ from types in patched code. 
  * Return err and skip else clause after call to request_firmware().
  * Drop all references to BuildNumber and OperationalBuildNumber,
    since they are not used.
  * Drop use of CamelCase in patched code (except in references to
    struct ti_i2c_firmware_rec from io_usbvend.h).
  * Add firmware version decoding and track it in a new "fw_version"
    field in edgeport_serial.

* Patch 2: "USB: io_ti: Add heartbeat to keep idle Edgeport ports from disconnecting"
  * Rename "heartbeat_task" to "heartbeat_work".
  * Rename EP_HEARTBEAT_SECS to FW_HEARTBEAT_SECS and expand comment.
  * Increase FW_HEARTBEAT_SECS from 15 to 40 seconds.  (Digi Tech Support
    originally suggested 15 seconds; 40 works on the several Edgeports
    I've tested; I have a question pending with Digi Tech Support asking
    if this will be valid for all Edgeports).
  * Rename heartbeat() to edge_heartbeat_work().
  * Allocate "rom_desc" via kmalloc in edge_heartbeat_work(). 
  * Remove dev_dbg() in edge_heartbeat_work().
  * Use serial->serial->interface->dev for messages affected by the
    patch.
  * Add braces to if-block in edge_heartbeat_work() for readability.
  * Use FW_HEARTBEAT_SECS * HZ throughout.
  * Move cancel_delayed_work_sync() call to edge_release() rather than
    edge_port_remove().
  * Remove dev_dbg() messages from edge_suspend() and edge_resume().
  * Add newlines in edge_suspend() and edge_resume().
  * Add FW_HEARTBEAT_VERSION_CUTOFF, set to version 4.80, and schedule
    heartbeats only for devices using newer firmware versions.
    
 
[1]: v3: http://marc.info/?l=linux-usb&m=143166661617305&w=2


Peter E. Berger (2):
  USB: io_ti: Fix Edgeport firmware download code
  USB: io_ti: Add heartbeat to keep idle Edgeport ports from
    disconnecting

 drivers/usb/serial/io_ti.c | 180 ++++++++++++++++++++++++++++++++-------------
 1 file changed, 129 insertions(+), 51 deletions(-)

-- 
1.8.3.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux