From: Stephen Street <stephen@streetfiresound.com>
To: David Brownell <david-b@pacbell.net>
Cc: eemike@gmail.com, Linux Kernel list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH/RFC] simple SPI controller on PXA2xx SSP port, refresh
Date: Fri, 04 Nov 2005 18:28:48 -0800 [thread overview]
Message-ID: <1131157728.426.113.camel@localhost.localdomain> (raw)
In-Reply-To: <200511041654.47109.david-b@pacbell.net>
On Fri, 2005-11-04 at 16:54 -0800, David Brownell wrote:
> That's not what I thought we were talking about. Stepping back, what's
> confusing is that there are three different kinds of per-device data,
> and the names are used inconsistently:
>
> spi_device.dev.platform_data ... from board_info.platform_data
> This is for the driver of the spi_device ... board-specific
> data that'd be the same for PXA or OMAP or PPC805 or whatever
>
> spi_device.platform_data ... from board_info.controller_data
> This is static controller-specific information, which you were
> using for things like chipselect functions and fifo tuning.
> (I had proposed to name this as "controller_data" in the
> spi_device too.)
Yes.
>
> spi_device.controller_data ... runtime state for the controller
> This is dynamic controller-specific information, which you
> were using for things like copies of register settings that
> set up clock speed and SPI mode for the device.
> (I had proposed to rename this as "controller_state".)
>
My understanding also. Let's at least do the renames.
> Now as for board_info.controller_data and its clone in spi_device,
> how about if I just delete that ... so that it'd be provided in the
> platform_device.dev.platform_data for the controller? That'd also
> let you substitute a typed pointer for a void* one, usually a sign
> of goodness.
>
This is where I am having the problem. I'm resisting removing the
board_info.controller_data (or what ever we decide to call it) because
the current code makes it easy to the have different master settings
(fifo threshold, chip select control) for each spi_device attached to
the master. If we move this to the platform_device.dev.platform_data
this then the master will have to maintain a table indexed by the
chip_select to track the per spi_device master configuration
information.
On the other hand if this is too confusing, then let make the API
simpler and the implementation more complex. Your call.
Bigger code snippet from my board init.
static struct cs8415a_platform_data cs8415a_platform_info = {
.enabled = 0,
.muted = 1,
.channel = 0,
.pll_lock_delay = 100,
.irq_flags = SA_SHIRQ,
.mask_interrupt = cs8415a_mask_interrupt,
.unmask_interrupt = cs8415a_unmask_interrupt,
.service_requested = cs8415a_service_requested,
};
static struct pxa2xx_spi_chip cs8415a_chip_info = {
.tx_threshold = 12,
.rx_threshold = 4,
.dma_burst_size = 8,
.timeout_microsecs = 64,
.cs_control = cs8415a_cs_control,
};
static struct pxa2xx_spi_chip cs8405a_chip_info = {
.tx_threshold = 12,
.rx_threshold = 4,
.dma_burst_size = 8,
.timeout_microsecs = 64,
.cs_control = cs8405a_cs_control,
};
static struct pxa2xx_spi_chip cs4341_chip_info = {
.tx_threshold = 8,
.rx_threshold = 8,
.timeout_microsecs = 1000,
.cs_control = cs4341_cs_control,
};
static struct spi_board_info streetracer_spi_board_info[] __initdata = {
{
.modalias = "cs8415a",
.max_speed_hz = 3686400,
.bus_num = 2,
.chip_select = 0,
.platform_data = &cs8415a_platform_info,
.controller_data = &cs8415a_chip_info,
.irq = STREETRACER_APCI_IRQ,
},
{
.modalias = "cs8405a",
.max_speed_hz = 3686400,
.bus_num = 2,
.chip_select = 1,
.controller_data = &cs8405a_chip_info,
.irq = STREETRACER_APCI_IRQ,
},
{
.modalias = "cs4341",
.max_speed_hz = 3686400,
.bus_num = 2,
.chip_select = 2,
.controller_data = &cs4341_chip_info,
},
};
Occupying some spare cycles is the idea that what we really need is the
ability to sub-class spi_device and spi_master via structure embedding.
This would be in the spirit of the 2.6 driver model and would map to the
platform_device model better. It would however, mean losing the
spi_board_info structure. Feel free to take a large hammer to me, if
this is really off base.
-Stephen
next prev parent reply other threads:[~2005-11-05 2:28 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-11-04 0:15 [PATCH/RFC] simple SPI controller on PXA2xx SSP port, refresh David Brownell
2005-11-04 18:52 ` Stephen Street
2005-11-04 20:16 ` David Brownell
2005-11-04 23:38 ` Stephen Street
2005-11-05 0:54 ` David Brownell
2005-11-05 2:28 ` Stephen Street [this message]
2005-11-05 20:58 ` David Brownell
-- strict thread matches above, loose matches on Subject: below --
2005-10-25 23:48 stephen
2005-10-27 11:33 ` Mike Lee
2005-10-27 16:41 ` Stephen Street
2005-10-29 18:25 ` Mike Lee
2005-11-01 18:35 ` Stephen Street
2005-11-03 9:37 ` Mike Lee
2005-11-04 18:11 ` Stephen Street
2005-11-04 20:36 ` Mark Underwood
2005-11-07 20:43 ` Mark Underwood
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=1131157728.426.113.camel@localhost.localdomain \
--to=stephen@streetfiresound.com \
--cc=david-b@pacbell.net \
--cc=eemike@gmail.com \
--cc=linux-kernel@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