From: Sinan Akman <sinan-w0xpxkV3uqlBDgjK7y7TUQ@public.gmane.org>
To: Thomas Chou <thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
Cc: nios2-dev-1eJk0qcHJCcaeqlQEoCUNoJY59XmG8rH@public.gmane.org,
David Brownell
<dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
Mike Frysinger <vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org>,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: [PATCH v3] spi: New driver for Altera SPI
Date: Mon, 17 Jan 2011 02:27:56 -0500 [thread overview]
Message-ID: <4D33EF7C.7030005@writeme.com> (raw)
In-Reply-To: <1295247869-4968-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
Thomas Chou wrote:
[...]
> +
> +static int altera_spi_txrx(struct spi_device *spi, struct spi_transfer *t)
> +{
> + struct altera_spi *hw = to_hw(spi);
> +
> + hw->tx = t->tx_buf;
> + hw->rx = t->rx_buf;
> + hw->count = 0;
> + hw->bytes_per_word = (t->bits_per_word ? : spi->bits_per_word) / 8;
> + hw->len = t->len / hw->bytes_per_word;
> +
> + if (hw->irq >= 0) {
> + init_completion(&hw->done);
I think you init this twice, once in altera_spi_probe
below as well.
> + /* enable receive interrupt */
> + hw->imr |= ALTERA_SPI_CONTROL_IRRDY_MSK;
> + writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
> +
> + /* send the first byte */
> + writel(hw_txbyte(hw, 0), hw->base + ALTERA_SPI_TXDATA);
> +
> + wait_for_completion(&hw->done);
> + /* disable receive interrupt */
> + hw->imr &= ~ALTERA_SPI_CONTROL_IRRDY_MSK;
> + writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
> + } else {
> + /* send the first byte */
> + writel(hw_txbyte(hw, 0), hw->base + ALTERA_SPI_TXDATA);
> +
> + while (1) {
> + unsigned int rxd;
> +
> + while (!(readl(hw->base + ALTERA_SPI_STATUS) &
> + ALTERA_SPI_STATUS_RRDY_MSK))
> + cpu_relax();
> +
> + rxd = readl(hw->base + ALTERA_SPI_RXDATA);
> + if (hw->rx) {
> + switch (hw->bytes_per_word) {
> + case 1:
> + hw->rx[hw->count] = rxd;
> + break;
> + case 2:
> + hw->rx[hw->count * 2] = rxd;
> + hw->rx[hw->count * 2 + 1] = rxd >> 8;
> + break;
> + }
> + }
> +
> + hw->count++;
> +
> + if (hw->count < hw->len)
> + writel(hw_txbyte(hw, hw->count),
> + hw->base + ALTERA_SPI_TXDATA);
> + else
> + break;
> + }
> +
> + }
> +
> + return hw->count * hw->bytes_per_word;
> +}
> +
> +static irqreturn_t altera_spi_irq(int irq, void *dev)
> +{
> + struct altera_spi *hw = dev;
> + unsigned int rxd;
> +
> + rxd = readl(hw->base + ALTERA_SPI_RXDATA);
> + if (hw->rx) {
> + switch (hw->bytes_per_word) {
> + case 1:
> + hw->rx[hw->count] = rxd;
> + break;
> + case 2:
> + hw->rx[hw->count * 2] = rxd;
> + hw->rx[hw->count * 2 + 1] = rxd >> 8;
> + break;
> + }
> + }
> +
> + hw->count++;
> +
> + if (hw->count < hw->len)
> + writel(hw_txbyte(hw, hw->count), hw->base + ALTERA_SPI_TXDATA);
> + else
> + complete(&hw->done);
> +
> + return IRQ_HANDLED;
> +}
> +
> +#ifdef CONFIG_OF
> +static int __devinit altera_spi_of_probe(struct platform_device *pdev,
> + struct altera_spi *hw)
> +{
> + const __be32 *val;
> +
> + hw->bitbang.master->dev.of_node = pdev->dev.of_node;
> + return 0;
> +}
> +#else
> +static int __devinit altera_spi_of_probe(struct platform_device *pdev,
> + struct altera_spi *hw)
> +{
> + return 0;
> +}
> +#endif
> +
> +static int __devinit altera_spi_probe(struct platform_device *pdev)
> +{
> + struct altera_spi_platform_data *platp = pdev->dev.platform_data;
> + struct altera_spi *hw;
> + struct spi_master *master;
> + struct resource *res;
> + int err = 0;
> +
> + master = spi_alloc_master(&pdev->dev, sizeof(struct altera_spi));
> + if (master == NULL) {
> + dev_err(&pdev->dev, "No memory for spi_master\n");
> + err = -ENOMEM;
> + goto err_no_mem;
> + }
> +
> + /* setup the master state. */
> + master->bus_num = pdev->id;
> + master->num_chipselect = 16;
> + master->mode_bits = SPI_CS_HIGH;
> + master->setup = altera_spi_setup;
> +
> + hw = spi_master_get_devdata(master);
> + platform_set_drvdata(pdev, hw);
> +
> + /* setup the state for the bitbang driver */
> + hw->bitbang.master = spi_master_get(master);
> + if (hw->bitbang.master == NULL) {
> + dev_err(&pdev->dev, "Cannot get device\n");
> + err = -ENODEV;
> + goto err_no_dev;
> + }
> + hw->bitbang.setup_transfer = altera_spi_setupxfer;
> + hw->bitbang.chipselect = altera_spi_chipsel;
> + hw->bitbang.txrx_bufs = altera_spi_txrx;
> +
> + /* find and map our resources */
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (res == NULL) {
> + dev_err(&pdev->dev, "Cannot get IORESOURCE_MEM\n");
> + err = -ENOENT;
> + goto err_no_iores;
> + }
> + hw->base = ioremap(res->start, (res->end - res->start) + 1);
> + if (hw->base == 0) {
> + dev_err(&pdev->dev, "Cannot map IO\n");
> + err = -ENXIO;
> + goto err_no_iomap;
> + }
> + /* program defaults into the registers */
> + hw->imr = 0; /* disable spi interrupts */
> + writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
> + writel(0, hw->base + ALTERA_SPI_STATUS); /* clear status reg */
> + if (readl(hw->base + ALTERA_SPI_STATUS) & ALTERA_SPI_STATUS_RRDY_MSK)
> + readl(hw->base + ALTERA_SPI_RXDATA); /* flush rxdata */
> + /* irq is optional */
> + hw->irq = platform_get_irq(pdev, 0);
> + if (hw->irq >= 0) {
> + init_completion(&hw->done);
> + err = request_irq(hw->irq, altera_spi_irq, 0, pdev->name, hw);
> + if (err) {
> + dev_err(&pdev->dev, "Cannot claim IRQ\n");
> + goto err_no_irq;
> + }
> + }
> + /* find platform data */
> + if (!platp) {
> + err = altera_spi_of_probe(pdev, hw);
> + if (err)
> + goto err_no_of;
> + }
> +
> + /* register our spi controller */
> + err = spi_bitbang_start(&hw->bitbang);
> + if (err) {
> + dev_err(&pdev->dev, "Failed to register SPI master\n");
> + goto err_register;
> + }
> + dev_info(&pdev->dev, "base %p, irq %d\n", hw->base, hw->irq);
> +
> + return 0;
> +
> +err_register:
> +err_no_of:
> + if (hw->irq >= 0)
> + free_irq(hw->irq, hw);
> +err_no_irq:
> + iounmap((void *)hw->base);
> +err_no_iomap:
> +err_no_iores:
> + spi_master_put(master);;
> +err_no_mem:
> +err_no_dev:
> + return err;
> +}
> +
> +static int __devexit altera_spi_remove(struct platform_device *dev)
> +{
> + struct altera_spi *hw = platform_get_drvdata(dev);
> + struct spi_master *master = hw->bitbang.master;
> +
> + spi_bitbang_stop(&hw->bitbang);
> +
> + if (hw->irq >= 0)
> + free_irq(hw->irq, hw);
> + iounmap((void *)hw->base);
> +
> + platform_set_drvdata(dev, NULL);
> + spi_master_put(master);
> + return 0;
> +}
> +
> +#ifdef CONFIG_OF
> +static struct of_device_id altera_spi_match[] = {
> + {
> + .compatible = "altera,spi_altera",
> + },
> + {},
> +}
> +MODULE_DEVICE_TABLE(of, altera_spi_match);
> +#endif
> +
> +static struct platform_driver altera_spidrv = {
> + .remove = __devexit_p(altera_spi_remove),
> + .driver = {
> + .name = DRV_NAME,
> + .owner = THIS_MODULE,
> + .pm = NULL,
> +#ifdef CONFIG_OF
> + .of_match_table = altera_spi_match,
> +#endif
> + },
> +};
> +
> +static int __init altera_spi_init(void)
> +{
> + return platform_driver_probe(&altera_spidrv, altera_spi_probe);
> +}
> +
> +static void __exit altera_spi_exit(void)
> +{
> + platform_driver_unregister(&altera_spidrv);
> +}
> +
> +module_init(altera_spi_init);
> +module_exit(altera_spi_exit);
> +
> +MODULE_DESCRIPTION("Altera SPI driver");
> +MODULE_AUTHOR("Thomas Chou <thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>");
> +MODULE_LICENSE("GPL");
> +MODULE_ALIAS("platform:" DRV_NAME);
------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
WARNING: multiple messages have this Message-ID (diff)
From: Sinan Akman <sinan@writeme.com>
To: Thomas Chou <thomas@wytron.com.tw>
Cc: David Brownell <dbrownell@users.sourceforge.net>,
Grant Likely <grant.likely@secretlab.ca>,
nios2-dev@sopc.et.ntust.edu.tw,
Mike Frysinger <vapier@gentoo.org>,
devicetree-discuss@lists.ozlabs.org,
linux-kernel@vger.kernel.org,
spi-devel-general@lists.sourceforge.net
Subject: Re: [PATCH v3] spi: New driver for Altera SPI
Date: Mon, 17 Jan 2011 02:27:56 -0500 [thread overview]
Message-ID: <4D33EF7C.7030005@writeme.com> (raw)
In-Reply-To: <1295247869-4968-1-git-send-email-thomas@wytron.com.tw>
Thomas Chou wrote:
[...]
> +
> +static int altera_spi_txrx(struct spi_device *spi, struct spi_transfer *t)
> +{
> + struct altera_spi *hw = to_hw(spi);
> +
> + hw->tx = t->tx_buf;
> + hw->rx = t->rx_buf;
> + hw->count = 0;
> + hw->bytes_per_word = (t->bits_per_word ? : spi->bits_per_word) / 8;
> + hw->len = t->len / hw->bytes_per_word;
> +
> + if (hw->irq >= 0) {
> + init_completion(&hw->done);
I think you init this twice, once in altera_spi_probe
below as well.
> + /* enable receive interrupt */
> + hw->imr |= ALTERA_SPI_CONTROL_IRRDY_MSK;
> + writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
> +
> + /* send the first byte */
> + writel(hw_txbyte(hw, 0), hw->base + ALTERA_SPI_TXDATA);
> +
> + wait_for_completion(&hw->done);
> + /* disable receive interrupt */
> + hw->imr &= ~ALTERA_SPI_CONTROL_IRRDY_MSK;
> + writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
> + } else {
> + /* send the first byte */
> + writel(hw_txbyte(hw, 0), hw->base + ALTERA_SPI_TXDATA);
> +
> + while (1) {
> + unsigned int rxd;
> +
> + while (!(readl(hw->base + ALTERA_SPI_STATUS) &
> + ALTERA_SPI_STATUS_RRDY_MSK))
> + cpu_relax();
> +
> + rxd = readl(hw->base + ALTERA_SPI_RXDATA);
> + if (hw->rx) {
> + switch (hw->bytes_per_word) {
> + case 1:
> + hw->rx[hw->count] = rxd;
> + break;
> + case 2:
> + hw->rx[hw->count * 2] = rxd;
> + hw->rx[hw->count * 2 + 1] = rxd >> 8;
> + break;
> + }
> + }
> +
> + hw->count++;
> +
> + if (hw->count < hw->len)
> + writel(hw_txbyte(hw, hw->count),
> + hw->base + ALTERA_SPI_TXDATA);
> + else
> + break;
> + }
> +
> + }
> +
> + return hw->count * hw->bytes_per_word;
> +}
> +
> +static irqreturn_t altera_spi_irq(int irq, void *dev)
> +{
> + struct altera_spi *hw = dev;
> + unsigned int rxd;
> +
> + rxd = readl(hw->base + ALTERA_SPI_RXDATA);
> + if (hw->rx) {
> + switch (hw->bytes_per_word) {
> + case 1:
> + hw->rx[hw->count] = rxd;
> + break;
> + case 2:
> + hw->rx[hw->count * 2] = rxd;
> + hw->rx[hw->count * 2 + 1] = rxd >> 8;
> + break;
> + }
> + }
> +
> + hw->count++;
> +
> + if (hw->count < hw->len)
> + writel(hw_txbyte(hw, hw->count), hw->base + ALTERA_SPI_TXDATA);
> + else
> + complete(&hw->done);
> +
> + return IRQ_HANDLED;
> +}
> +
> +#ifdef CONFIG_OF
> +static int __devinit altera_spi_of_probe(struct platform_device *pdev,
> + struct altera_spi *hw)
> +{
> + const __be32 *val;
> +
> + hw->bitbang.master->dev.of_node = pdev->dev.of_node;
> + return 0;
> +}
> +#else
> +static int __devinit altera_spi_of_probe(struct platform_device *pdev,
> + struct altera_spi *hw)
> +{
> + return 0;
> +}
> +#endif
> +
> +static int __devinit altera_spi_probe(struct platform_device *pdev)
> +{
> + struct altera_spi_platform_data *platp = pdev->dev.platform_data;
> + struct altera_spi *hw;
> + struct spi_master *master;
> + struct resource *res;
> + int err = 0;
> +
> + master = spi_alloc_master(&pdev->dev, sizeof(struct altera_spi));
> + if (master == NULL) {
> + dev_err(&pdev->dev, "No memory for spi_master\n");
> + err = -ENOMEM;
> + goto err_no_mem;
> + }
> +
> + /* setup the master state. */
> + master->bus_num = pdev->id;
> + master->num_chipselect = 16;
> + master->mode_bits = SPI_CS_HIGH;
> + master->setup = altera_spi_setup;
> +
> + hw = spi_master_get_devdata(master);
> + platform_set_drvdata(pdev, hw);
> +
> + /* setup the state for the bitbang driver */
> + hw->bitbang.master = spi_master_get(master);
> + if (hw->bitbang.master == NULL) {
> + dev_err(&pdev->dev, "Cannot get device\n");
> + err = -ENODEV;
> + goto err_no_dev;
> + }
> + hw->bitbang.setup_transfer = altera_spi_setupxfer;
> + hw->bitbang.chipselect = altera_spi_chipsel;
> + hw->bitbang.txrx_bufs = altera_spi_txrx;
> +
> + /* find and map our resources */
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (res == NULL) {
> + dev_err(&pdev->dev, "Cannot get IORESOURCE_MEM\n");
> + err = -ENOENT;
> + goto err_no_iores;
> + }
> + hw->base = ioremap(res->start, (res->end - res->start) + 1);
> + if (hw->base == 0) {
> + dev_err(&pdev->dev, "Cannot map IO\n");
> + err = -ENXIO;
> + goto err_no_iomap;
> + }
> + /* program defaults into the registers */
> + hw->imr = 0; /* disable spi interrupts */
> + writel(hw->imr, hw->base + ALTERA_SPI_CONTROL);
> + writel(0, hw->base + ALTERA_SPI_STATUS); /* clear status reg */
> + if (readl(hw->base + ALTERA_SPI_STATUS) & ALTERA_SPI_STATUS_RRDY_MSK)
> + readl(hw->base + ALTERA_SPI_RXDATA); /* flush rxdata */
> + /* irq is optional */
> + hw->irq = platform_get_irq(pdev, 0);
> + if (hw->irq >= 0) {
> + init_completion(&hw->done);
> + err = request_irq(hw->irq, altera_spi_irq, 0, pdev->name, hw);
> + if (err) {
> + dev_err(&pdev->dev, "Cannot claim IRQ\n");
> + goto err_no_irq;
> + }
> + }
> + /* find platform data */
> + if (!platp) {
> + err = altera_spi_of_probe(pdev, hw);
> + if (err)
> + goto err_no_of;
> + }
> +
> + /* register our spi controller */
> + err = spi_bitbang_start(&hw->bitbang);
> + if (err) {
> + dev_err(&pdev->dev, "Failed to register SPI master\n");
> + goto err_register;
> + }
> + dev_info(&pdev->dev, "base %p, irq %d\n", hw->base, hw->irq);
> +
> + return 0;
> +
> +err_register:
> +err_no_of:
> + if (hw->irq >= 0)
> + free_irq(hw->irq, hw);
> +err_no_irq:
> + iounmap((void *)hw->base);
> +err_no_iomap:
> +err_no_iores:
> + spi_master_put(master);;
> +err_no_mem:
> +err_no_dev:
> + return err;
> +}
> +
> +static int __devexit altera_spi_remove(struct platform_device *dev)
> +{
> + struct altera_spi *hw = platform_get_drvdata(dev);
> + struct spi_master *master = hw->bitbang.master;
> +
> + spi_bitbang_stop(&hw->bitbang);
> +
> + if (hw->irq >= 0)
> + free_irq(hw->irq, hw);
> + iounmap((void *)hw->base);
> +
> + platform_set_drvdata(dev, NULL);
> + spi_master_put(master);
> + return 0;
> +}
> +
> +#ifdef CONFIG_OF
> +static struct of_device_id altera_spi_match[] = {
> + {
> + .compatible = "altera,spi_altera",
> + },
> + {},
> +}
> +MODULE_DEVICE_TABLE(of, altera_spi_match);
> +#endif
> +
> +static struct platform_driver altera_spidrv = {
> + .remove = __devexit_p(altera_spi_remove),
> + .driver = {
> + .name = DRV_NAME,
> + .owner = THIS_MODULE,
> + .pm = NULL,
> +#ifdef CONFIG_OF
> + .of_match_table = altera_spi_match,
> +#endif
> + },
> +};
> +
> +static int __init altera_spi_init(void)
> +{
> + return platform_driver_probe(&altera_spidrv, altera_spi_probe);
> +}
> +
> +static void __exit altera_spi_exit(void)
> +{
> + platform_driver_unregister(&altera_spidrv);
> +}
> +
> +module_init(altera_spi_init);
> +module_exit(altera_spi_exit);
> +
> +MODULE_DESCRIPTION("Altera SPI driver");
> +MODULE_AUTHOR("Thomas Chou <thomas@wytron.com.tw>");
> +MODULE_LICENSE("GPL");
> +MODULE_ALIAS("platform:" DRV_NAME);
next prev parent reply other threads:[~2011-01-17 7:27 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-08 6:03 [PATCH] spi: New driver for Altera SPI Thomas Chou
[not found] ` <1254981838-20584-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-01-17 5:46 ` [PATCH v2] " Thomas Chou
2011-01-17 5:46 ` Thomas Chou
[not found] ` <1295243200-28230-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-01-17 5:59 ` Stephen Rothwell
2011-01-17 5:59 ` Stephen Rothwell
[not found] ` <20110117165958.f89e8220.sfr-3FnU+UHB4dNDw9hX6IcOSA@public.gmane.org>
2011-01-17 6:22 ` Thomas Chou
2011-01-17 6:22 ` Thomas Chou
[not found] ` <4D33E00E.5050802-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-01-17 6:45 ` Grant Likely
2011-01-17 6:45 ` Grant Likely
[not found] ` <AANLkTi=D4Rcxbei2oo+EHc6X1O-2Oo+VWHAasK_JLj5W-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-01-17 7:04 ` [PATCH v3] " Thomas Chou
2011-01-17 7:04 ` Thomas Chou
[not found] ` <1295247869-4968-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-01-17 7:27 ` Sinan Akman [this message]
2011-01-17 7:27 ` Sinan Akman
[not found] ` <4D33EF7C.7030005-w0xpxkV3uqlBDgjK7y7TUQ@public.gmane.org>
2011-01-18 1:33 ` Thomas Chou
2011-01-18 1:33 ` Thomas Chou
2011-01-19 1:36 ` Thomas Chou
2011-01-19 1:36 ` Thomas Chou
2011-01-17 6:56 ` [PATCH v2] " Grant Likely
2011-01-17 6:56 ` Grant Likely
[not found] ` <AANLkTimCvYai7mvrrHP9=EXB4L+yw3W2ad-7DU_iEzLy-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-01-17 7:13 ` [PATCH v4] " Thomas Chou
2011-01-17 7:13 ` Thomas Chou
[not found] ` <1295248436-5049-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-01-17 7:42 ` Grant Likely
2011-01-17 7:42 ` Grant Likely
[not found] ` <AANLkTinXduw54sKNa8r9sLm_Q8YjvpqAseYPhRshbNpE-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2011-01-24 6:38 ` [PATCH v5] " Thomas Chou
2011-01-24 6:38 ` Thomas Chou
2011-02-03 10:02 ` [PATCH v6] " Thomas Chou
[not found] ` <1296727326-2581-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-02-03 17:34 ` Grant Likely
2011-02-03 17:34 ` Grant Likely
2011-02-05 13:08 ` Thomas Chou
2011-02-05 14:02 ` [PATCH v7] " Thomas Chou
2011-02-06 20:23 ` Peter Korsgaard
[not found] ` <87aai8zzd1.fsf-uXGAPMMVk8amE9MCos8gUmSdvHPH+/yF@public.gmane.org>
2011-02-08 2:43 ` Thomas Chou
2011-02-08 2:43 ` Thomas Chou
2011-02-08 5:21 ` [PATCH v8] " Thomas Chou
[not found] ` <1297142509-20158-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-02-14 2:10 ` [PATCH v9] " Thomas Chou
2011-02-14 2:10 ` Thomas Chou
2011-02-14 2:20 ` Ryan Mallon
[not found] ` <4D58917E.9050408-7Wk5F4Od5/oYd5yxfr4S2w@public.gmane.org>
2011-02-15 7:04 ` Thomas Chou
2011-02-15 7:04 ` Thomas Chou
[not found] ` <4D5A2591.5090901-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-02-15 9:12 ` Ryan Mallon
2011-02-15 9:12 ` Ryan Mallon
2011-02-15 19:42 ` Grant Likely
2011-02-15 21:58 ` Ryan Mallon
[not found] ` <1297649443-11491-1-git-send-email-thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org>
2011-02-16 2:47 ` Grant Likely
2011-02-16 2:47 ` Grant Likely
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=4D33EF7C.7030005@writeme.com \
--to=sinan-w0xpxkv3uqlbdgjk7y7tuq@public.gmane.org \
--cc=dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=nios2-dev-1eJk0qcHJCcaeqlQEoCUNoJY59XmG8rH@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=thomas-SDxUXYEhEBiCuPEqFHbRBg@public.gmane.org \
--cc=vapier-aBrp7R+bbdUdnm+yROfE0A@public.gmane.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.