mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Tal Shorer <tal.shorer@gmail.com>
To: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, heikki.krogerus@linux.intel.com,
	balbi@kernel.org, Tal Shorer <tal.shorer@gmail.com>
Subject: [PATCH 0/5] usb: ulpi: remove "dev" field from struct ulpi_ops
Date: Sun, 31 Jul 2016 02:22:17 +0300	[thread overview]
Message-ID: <1469920942-10680-1-git-send-email-tal.shorer@gmail.com> (raw)

struct ulpi_ops is defined as follows:

struct ulpi_ops {
        struct device *dev;
        int (*read)(struct ulpi_ops *ops, u8 addr);
        int (*write)(struct ulpi_ops *ops, u8 addr, u8 val);
};

Upon calling ulpi_register_interface(), the struct device argument is
put inside the struct ulpi_ops argument's dev field. Later, when
calling the actual read()/write() operations, the struct ulpi_ops is
passed to them and they use the stored device to access whatever
private data they need.

This means that if one wishes to reuse the same oprations for multiple
interfaces (e.g if we have multiple instances of the same controller),
any but the last interface registered will not operate properly (and
the one that does work will be at the mercy of the others to not mess
it up).

I understand that barely any driver uses this bus right now, but I
suppose it's there to be used at some point. We might as well fix the
design here before we hit this bug.

This series fixes this by passing the given struct device directly to
the operation functions via ulpi->dev.parent in ulpi_read() and
ulpi_write(). It also changes the operations struct to be constant
since now nobody has a reason to modify it.

Tal Shorer (5):
  usb: ulpi: move setting of ulpi->dev parent up in ulpi_register()
  usb: ulpi: change operations api to pass parent device directly
  usb: ulpi: remove "dev" field from struct ulpi_ops
  usb: ulpi: make ops struct constant
  usb: dwc3: ulpi: make dwc3_ulpi_ops constant

 drivers/usb/common/ulpi.c      | 11 ++++++-----
 drivers/usb/dwc3/ulpi.c        | 10 +++++-----
 include/linux/ulpi/driver.h    |  2 +-
 include/linux/ulpi/interface.h |  8 ++++----
 4 files changed, 16 insertions(+), 15 deletions(-)

--
2.7.4

             reply	other threads:[~2016-07-30 23:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-30 23:22 Tal Shorer [this message]
2016-07-30 23:22 ` [PATCH 1/5] usb: ulpi: move setting of ulpi->dev parent up in ulpi_register() Tal Shorer
2016-07-30 23:22 ` [PATCH 2/5] usb: ulpi: change operations api to pass parent device directly Tal Shorer
2016-07-30 23:22 ` [PATCH 3/5] usb: ulpi: remove "dev" field from struct ulpi_ops Tal Shorer
2016-07-30 23:22 ` [PATCH 4/5] usb: ulpi: make ops struct constant Tal Shorer
2016-07-30 23:22 ` [PATCH 5/5] usb: dwc3: ulpi: make dwc3_ulpi_ops constant Tal Shorer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1469920942-10680-1-git-send-email-tal.shorer@gmail.com \
    --to=tal.shorer@gmail.com \
    --cc=balbi@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®