Linux Serial subsystem development
 help / color / mirror / Atom feed
* [SERIAL]fix serial_cs I/O windows for Argosy RS-COM 2P
From: Maciej Szmigiero @ 2011-12-01 21:39 UTC (permalink / raw)
  To: Alan Cox, linux-serial, linux-kernel

Current serial_cs driver has a problem when trying to detect whether
a card has multiple ports: serial_config() calls pcmcia_loop_config()
which iterates over card CIS configurations by calling
serial_check_for_multi() for each of them.

This function wants to check (and select) a configuration
that has either one long I/O window spanning multiple ports or two 8-port
windows for two serial ports.

Problem is, that every pcmcia_loop_config() iteration only updates
the windows (via pcmcia_do_loop_config() in resource[0] and resource[1])
when CONF_AUTO_SET_IO flag is set on the device, which is set only later
in the code.

Fix it by setting this flag earlier.

In addition to this, when multi-port card is detected
and it does not have an one, long I/O window
multi_config_check_notpicky() tries to locate two I/O windows and assumes
they are continuous without checking.

On an Argosy RS-COM 2P this selects first configuration, which
unfortunately has two non-continuous I/O windows.
The net effect is that the second serial port on the card does not work.

Fix it by checking whether the windows are really continuous.

Signed-off-by: Maciej Szmigiero <mhej@o2.pl>

diff --git a/drivers/tty/serial/serial_cs.c b/drivers/tty/serial/serial_cs.c
index eef736f..8609060 100644
--- a/drivers/tty/serial/serial_cs.c
+++ b/drivers/tty/serial/serial_cs.c
@@ -317,7 +317,7 @@ static int serial_probe(struct pcmcia_device *link)
 	info->p_dev = link;
 	link->priv = info;
 
-	link->config_flags |= CONF_ENABLE_IRQ;
+	link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO;
 	if (do_sound)
 		link->config_flags |= CONF_ENABLE_SPKR;
 
@@ -445,7 +445,7 @@ static int simple_config(struct pcmcia_device *link)
 
 	/* First pass: look for a config entry that looks normal.
 	 * Two tries: without IO aliases, then with aliases */
-	link->config_flags |= CONF_AUTO_SET_VPP | CONF_AUTO_SET_IO;
+	link->config_flags |= CONF_AUTO_SET_VPP;
 	for (try = 0; try < 4; try++)
 		if (!pcmcia_loop_config(link, simple_config_check, &try))
 			goto found_port;
@@ -501,7 +501,8 @@ static int multi_config_check_notpicky(struct pcmcia_device *p_dev,
 {
 	int *base2 = priv_data;
 
-	if (!p_dev->resource[0]->end || !p_dev->resource[1]->end)
+	if (!p_dev->resource[0]->end || !p_dev->resource[1]->end ||
+		p_dev->resource[0]->start + 8 != p_dev->resource[1]->start)
 		return -ENODEV;
 
 	p_dev->resource[0]->end = p_dev->resource[1]->end = 8;
@@ -520,7 +521,6 @@ static int multi_config(struct pcmcia_device *link)
 	struct serial_info *info = link->priv;
 	int i, base2 = 0;
 
-	link->config_flags |= CONF_AUTO_SET_IO;
 	/* First, look for a generic full-sized window */
 	if (!pcmcia_loop_config(link, multi_config_check, &info->multi))
 		base2 = link->resource[0]->start + 8;

^ permalink raw reply related

* Re: RS-485 automatic RTS toggle in Linux (on Winbond W83627UHG)
From: Tomas Lastovicka @ 2011-11-29 23:15 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: linux-serial
In-Reply-To: <20111129223626.GB12314@pengutronix.de>

Thanks for both links Wolfram! I will find out what revision i actually have.

Best,
Tomas


On Tue, Nov 29, 2011 at 5:36 PM, Wolfram Sang <w.sang@pengutronix.de> wrote:
> On Tue, Nov 29, 2011 at 05:25:32PM -0500, Tomas Lastovicka wrote:
>
>> Then i definitely have a different datasheet (v1.41). No 485 matches were found.
>
> I got v1.7:
>
> http://www.nuvoton.com/NuvotonMOSS/Community/ProductInfo.aspx?tp_GUID=8310ab06-af65-4ec9-92a6-17cf791aa9f2
>
> Ah, it says RS485 is only available on Revision E. Hopefully, you have that.
>
>> Indeed, if it has support then there is no need for software toggle
>> (although i still think it is done this way in the Etrax driver coming
>> with the kernel).
>
> I think that was the first RS485 one, so probably just lucky ;)
>
> If you are interested, another series adding support for 8250-variants that
> have HW support can be found here:
>
> http://lkml.org/lkml/2011/11/16/270
>
> Regards,
>
>   Wolfram
>
> --
> Pengutronix e.K.                           | Wolfram Sang                |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
>
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: RS-485 automatic RTS toggle in Linux (on Winbond W83627UHG)
From: Wolfram Sang @ 2011-11-29 22:36 UTC (permalink / raw)
  To: Tomas Lastovicka; +Cc: linux-serial
In-Reply-To: <CAFnDbmA1u041X4LQv0pbdAAoR=LBqgdmOGRj_J5MhA2euMKFOw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 932 bytes --]

On Tue, Nov 29, 2011 at 05:25:32PM -0500, Tomas Lastovicka wrote:

> Then i definitely have a different datasheet (v1.41). No 485 matches were found.

I got v1.7:

http://www.nuvoton.com/NuvotonMOSS/Community/ProductInfo.aspx?tp_GUID=8310ab06-af65-4ec9-92a6-17cf791aa9f2

Ah, it says RS485 is only available on Revision E. Hopefully, you have that.

> Indeed, if it has support then there is no need for software toggle
> (although i still think it is done this way in the Etrax driver coming
> with the kernel).

I think that was the first RS485 one, so probably just lucky ;)

If you are interested, another series adding support for 8250-variants that
have HW support can be found here:

http://lkml.org/lkml/2011/11/16/270

Regards,

   Wolfram

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* Re: RS-485 automatic RTS toggle in Linux (on Winbond W83627UHG)
From: Tomas Lastovicka @ 2011-11-29 22:25 UTC (permalink / raw)
  To: Wolfram Sang; +Cc: linux-serial
In-Reply-To: <20111129222002.GA12314@pengutronix.de>

Then i definitely have a different datasheet (v1.41). No 485 matches were found.
Indeed, if it has support then there is no need for software toggle
(although i still think it is done this way in the Etrax driver coming
with the kernel).


On Tue, Nov 29, 2011 at 5:20 PM, Wolfram Sang <w.sang@pengutronix.de> wrote:
>
>> Unless i have overlooked something, i do not see how to toggle the
>> automatic RTS mode from W83627UHG's datasheet. Have you found it?
>
> Yes, searching for '485' gives you all the info you need (if we got the same
> datasheet).
>
>> Regarding 2.6.38+ drivers, Atmel supports RS485 on the hardware level
>> and Etrax is handling the RTS toggling directly from the driver. I
>
> Hardware level is the only official supported way in Linux. Software toggling
> can easily fail due to preemption.
>
>> guess this is what i will finally have to do, i.e. to toggle RTS from
>> the driver myself.
>
> Why? If the hardware has support?
>
>> I am surprised that the RTS toggling issue for RS485 in Linux is
>> around for quite a while.
>
> It has come a long way, but all you need is there now (except for software
> based direction control, see above).
>
> Regards,
>
>   Wolfram
>
> --
> Pengutronix e.K.                           | Wolfram Sang                |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
>
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: RS-485 automatic RTS toggle in Linux (on Winbond W83627UHG)
From: Wolfram Sang @ 2011-11-29 22:20 UTC (permalink / raw)
  To: Tomas Lastovicka; +Cc: linux-serial
In-Reply-To: <CAFnDbmAAZZFNJAc=Y92xrkUujemTK63_2-H3TVkvbjVrsjUKgg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1030 bytes --]


> Unless i have overlooked something, i do not see how to toggle the
> automatic RTS mode from W83627UHG's datasheet. Have you found it?

Yes, searching for '485' gives you all the info you need (if we got the same
datasheet).

> Regarding 2.6.38+ drivers, Atmel supports RS485 on the hardware level
> and Etrax is handling the RTS toggling directly from the driver. I

Hardware level is the only official supported way in Linux. Software toggling
can easily fail due to preemption.

> guess this is what i will finally have to do, i.e. to toggle RTS from
> the driver myself.

Why? If the hardware has support?

> I am surprised that the RTS toggling issue for RS485 in Linux is
> around for quite a while.

It has come a long way, but all you need is there now (except for software
based direction control, see above).

Regards,

   Wolfram

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* Re: RS-485 automatic RTS toggle in Linux (on Winbond W83627UHG)
From: Tomas Lastovicka @ 2011-11-29 22:13 UTC (permalink / raw)
  To: linux-serial, Wolfram Sang
In-Reply-To: <20111129175728.GH5455@pengutronix.de>

Unless i have overlooked something, i do not see how to toggle the
automatic RTS mode from W83627UHG's datasheet. Have you found it?

Regarding 2.6.38+ drivers, Atmel supports RS485 on the hardware level
and Etrax is handling the RTS toggling directly from the driver. I
guess this is what i will finally have to do, i.e. to toggle RTS from
the driver myself.

I am surprised that the RTS toggling issue for RS485 in Linux is
around for quite a while.

Cheers,

Tomas


On Tue, Nov 29, 2011 at 12:57 PM, Wolfram Sang <w.sang@pengutronix.de> wrote:
>> supported. Googling this issue around, i found a couple of suggestions
>> but no solution (except drivers for Atmel and Etrax since kernel
>> 2.6.38).
>
> Judging from the datasheet, the device can do hardware based RS485,
> nice. So look at those drivers you mentioned above how they handle the
> RS485-related IOCTLs and adapt the bits for the hardware configuration.
> Should be more fun with a newer kernel, but I think it is doable.
>
> Regards,
>
>   Wolfram
>
> --
> Pengutronix e.K.                           | Wolfram Sang                |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iEYEARECAAYFAk7VHQgACgkQD27XaX1/VRsO2wCfXOsvPoOtw8QV8YzkKHocp6K8
> lYEAnR/OExYTbdEtEqT8Dgl3Y/TCra83
> =0ZuI
> -----END PGP SIGNATURE-----
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: RS-485 automatic RTS toggle in Linux (on Winbond W83627UHG)
From: Wolfram Sang @ 2011-11-29 17:57 UTC (permalink / raw)
  To: Tomas Lastovicka; +Cc: linux-serial
In-Reply-To: <CAFnDbmD-LG1O45d9s8GPxcbmjeFJ=vSp450oJ_75ooxBMtZFCg@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 622 bytes --]

> supported. Googling this issue around, i found a couple of suggestions
> but no solution (except drivers for Atmel and Etrax since kernel
> 2.6.38).

Judging from the datasheet, the device can do hardware based RS485,
nice. So look at those drivers you mentioned above how they handle the
RS485-related IOCTLs and adapt the bits for the hardware configuration.
Should be more fun with a newer kernel, but I think it is doable.

Regards,

   Wolfram

-- 
Pengutronix e.K.                           | Wolfram Sang                |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* RS-485 automatic RTS toggle in Linux (on Winbond W83627UHG)
From: Tomas Lastovicka @ 2011-11-29 17:20 UTC (permalink / raw)
  To: linux-serial

Hi,

i am trying to use a Linux running embedded PC with built-it RS-485
port as a master to control one slave device. My problem is the usual
one, i can not figure out how to perform an automatic RTS toggle. I.e.
to send data to 485 and after the last byte was sent, quickly switch
to the read mode (but not from my code in the user space). The Linux
kernel is 2.6.32 and an automatic RTS toggle is not natively
supported. Googling this issue around, i found a couple of suggestions
but no solution (except drivers for Atmel and Etrax since kernel
2.6.38).

Does anyone has experience with RS-485 in embedded real-time Linux
PCs? The chip used is Winbond W83627UHG and looking into its
documentation, it is not obvious to me how to handle the RTS toggle
properly. I can write and read to/from 485 but i have to toggle RTS by
hand from my code, which is not what i want to do and it does not
quite work with the slave device either.

Cheers,

Tomas

^ permalink raw reply

* Re: [PATCH v2 3/4] omap-serial: Add minimal device tree support
From: Rajendra Nayak @ 2011-11-29  7:04 UTC (permalink / raw)
  To: Rob Herring
  Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
	govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches
In-Reply-To: <4ED38F1C.5080604@gmail.com>

On Monday 28 November 2011 07:09 PM, Rob Herring wrote:
> On 11/22/2011 07:44 AM, Rajendra Nayak wrote:
>> Adapt the driver to device tree and pass minimal platform
>> data from device tree needed for console boot.
>> No power management features will be suppported for now
>> since it requires more tweaks around OCP settings
>> to toggle forceidle/noidle/smaridle bits and handling
>
> typo: smartidle
>
>> remote wakeup and dynamic muxing.
>>
>> Signed-off-by: Rajendra Nayak<rnayak@ti.com>
>
> Acked-by: Rob Herring<rob.herring@calxeda.com>

Thanks Rob, will fix the above typo.

>
> Rob
>
>> ---
>>   .../devicetree/bindings/serial/omap_serial.txt     |   10 ++++
>>   drivers/tty/serial/omap-serial.c                   |   45 ++++++++++++++++++-
>>   2 files changed, 52 insertions(+), 3 deletions(-)
>>   create mode 100644 Documentation/devicetree/bindings/serial/omap_serial.txt
>>
>> diff --git a/Documentation/devicetree/bindings/serial/omap_serial.txt b/Documentation/devicetree/bindings/serial/omap_serial.txt
>> new file mode 100644
>> index 0000000..342eedd
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/serial/omap_serial.txt
>> @@ -0,0 +1,10 @@
>> +OMAP UART controller
>> +
>> +Required properties:
>> +- compatible : should be "ti,omap2-uart" for OMAP2 controllers
>> +- compatible : should be "ti,omap3-uart" for OMAP3 controllers
>> +- compatible : should be "ti,omap4-uart" for OMAP4 controllers
>> +- ti,hwmods : Must be "uart<n>", n being the instance number (1-based)
>> +
>> +Optional properties:
>> +- clock-frequency : frequency of the clock input to the UART
>> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
>> index f14b9c5..5aa524e 100644
>> --- a/drivers/tty/serial/omap-serial.c
>> +++ b/drivers/tty/serial/omap-serial.c
>> @@ -38,6 +38,7 @@
>>   #include<linux/serial_core.h>
>>   #include<linux/irq.h>
>>   #include<linux/pm_runtime.h>
>> +#include<linux/of.h>
>>
>>   #include<plat/dma.h>
>>   #include<plat/dmtimer.h>
>> @@ -1324,6 +1325,19 @@ static void uart_tx_dma_callback(int lch, u16 ch_status, void *data)
>>   	return;
>>   }
>>
>> +static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
>> +{
>> +	struct omap_uart_port_info *omap_up_info;
>> +
>> +	omap_up_info = devm_kzalloc(dev, sizeof(*omap_up_info), GFP_KERNEL);
>> +	if (!omap_up_info)
>> +		return NULL; /* out of memory */
>> +
>> +	of_property_read_u32(dev->of_node, "clock-frequency",
>> +					&omap_up_info->uartclk);
>> +	return omap_up_info;
>> +}
>> +
>>   static int serial_omap_probe(struct platform_device *pdev)
>>   {
>>   	struct uart_omap_port	*up;
>> @@ -1331,6 +1345,9 @@ static int serial_omap_probe(struct platform_device *pdev)
>>   	struct omap_uart_port_info *omap_up_info = pdev->dev.platform_data;
>>   	int ret = -ENOSPC;
>>
>> +	if (pdev->dev.of_node)
>> +		omap_up_info = of_get_uart_port_info(&pdev->dev);
>> +
>>   	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>>   	if (!mem) {
>>   		dev_err(&pdev->dev, "no mem resource?\n");
>> @@ -1375,9 +1392,20 @@ static int serial_omap_probe(struct platform_device *pdev)
>>   	up->port.regshift = 2;
>>   	up->port.fifosize = 64;
>>   	up->port.ops =&serial_omap_pops;
>> -	up->port.line = pdev->id;
>> -	sprintf(up->name, "OMAP UART%d", up->port.line);
>>
>> +	if (pdev->dev.of_node)
>> +		up->port.line = of_alias_get_id(pdev->dev.of_node, "serial");
>> +	else
>> +		up->port.line = pdev->id;
>> +
>> +	if (up->port.line<  0) {
>> +		dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n",
>> +								up->port.line);
>> +		ret = -ENODEV;
>> +		goto err;
>> +	}
>> +
>> +	sprintf(up->name, "OMAP UART%d", up->port.line);
>>   	up->port.mapbase = mem->start;
>>   	up->port.membase = ioremap(mem->start, resource_size(mem));
>>   	if (!up->port.membase) {
>> @@ -1530,7 +1558,7 @@ static int serial_omap_runtime_suspend(struct device *dev)
>>   	if (!up)
>>   		return -EINVAL;
>>
>> -	if (!pdata->enable_wakeup)
>> +	if (!pdata || !pdata->enable_wakeup)
>>   		return 0;
>>
>>   	if (pdata->get_context_loss_count)
>> @@ -1591,12 +1619,23 @@ static const struct dev_pm_ops serial_omap_dev_pm_ops = {
>>   				serial_omap_runtime_resume, NULL)
>>   };
>>
>> +#if defined(CONFIG_OF)
>> +static const struct of_device_id omap_serial_of_match[] = {
>> +	{ .compatible = "ti,omap2-uart" },
>> +	{ .compatible = "ti,omap3-uart" },
>> +	{ .compatible = "ti,omap4-uart" },
>> +	{},
>> +};
>> +MODULE_DEVICE_TABLE(of, omap_serial_of_match);
>> +#endif
>> +
>>   static struct platform_driver serial_omap_driver = {
>>   	.probe          = serial_omap_probe,
>>   	.remove         = serial_omap_remove,
>>   	.driver		= {
>>   		.name	= DRIVER_NAME,
>>   		.pm	=&serial_omap_dev_pm_ops,
>> +		.of_match_table = of_match_ptr(omap_serial_of_match),
>>   	},
>>   };
>>
>


^ permalink raw reply

* Re: [PATCH v2 0/4] OMAP serial device tree support
From: Rob Herring @ 2011-11-28 13:44 UTC (permalink / raw)
  To: Greg KH
  Cc: Rajendra Nayak, linux-serial, linux-omap, devicetree-discuss,
	tony, khilman, govindraj.raja, b-cousson, linux-arm-kernel,
	linaro-dev, patches
In-Reply-To: <20111128063149.GB15189@kroah.com>

On 11/28/2011 12:31 AM, Greg KH wrote:
> On Mon, Nov 28, 2011 at 11:36:56AM +0530, Rajendra Nayak wrote:
>> On Sunday 27 November 2011 09:06 AM, Greg KH wrote:
>>> On Tue, Nov 22, 2011 at 07:14:12PM +0530, Rajendra Nayak wrote:
>>>> v2 is based on the latest omap-serial runtime patches, which
>>>> can be found here[1]
>>>>
>>>> The series passes minimal data that allows serial console
>>>> boot, with UART's initialised from device tree.
>>>> However some of low power support for UART and remote
>>>> wakeup needs more work.
>>>> Boot tested on OMAP4 panda and OMAP4 sdp boards.
>>>>
>>>> Patches can be found here..
>>>> git://gitorious.org/omap-pm/linux.git for-dt/serial
>>>
>>> What tree are these going to go through, some device tree one, or do you
>>> want me to take the serial driver patches?
>>
>> Hi Greg,
>>
>> These patches have a dependency on the omap-serial runtime series.
>> So once that makes it in, through the serial driver tree, and once we
>> have the necessary Acks from the Device Tree maintainers on the relevant
>> patches from this series, these could go through the serial driver tree
>> as well.
> 
> Then all of these should probably go through the device tree tree.

Generally, DT related driver changes go in thru the respective driver trees.

Rob

^ permalink raw reply

* Re: [PATCH v2 4/4] ARM: omap: pass minimal SoC/board data for UART from dt
From: Rob Herring @ 2011-11-28 13:40 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
	govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches
In-Reply-To: <1321969456-24266-5-git-send-email-rnayak@ti.com>

On 11/22/2011 07:44 AM, Rajendra Nayak wrote:
> Pass minimal data needed for console boot, from dt, for
> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
> static initialization from generic board file.
> 
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>

Acked-by: Rob Herring <rob.herring@calxeda.com>

Rob
> ---
>  arch/arm/boot/dts/omap3.dtsi        |   31 +++++++++++++++++++++++++++++++
>  arch/arm/boot/dts/omap4.dtsi        |   28 ++++++++++++++++++++++++++++
>  arch/arm/mach-omap2/board-generic.c |    1 -
>  3 files changed, 59 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
> index d202bb5..216c331 100644
> --- a/arch/arm/boot/dts/omap3.dtsi
> +++ b/arch/arm/boot/dts/omap3.dtsi
> @@ -13,6 +13,13 @@
>  / {
>  	compatible = "ti,omap3430", "ti,omap3";
>  
> +	aliases {
> +		serial0 = &uart1;
> +		serial1 = &uart2;
> +		serial2 = &uart3;
> +		serial3 = &uart4;
> +	};
> +
>  	cpus {
>  		cpu@0 {
>  			compatible = "arm,cortex-a8";
> @@ -59,5 +66,29 @@
>  			interrupt-controller;
>  			#interrupt-cells = <1>;
>  		};
> +
> +		uart1: serial@0x4806a000 {
> +			compatible = "ti,omap3-uart";
> +			ti,hwmods = "uart1";
> +			clock-frequency = <48000000>;
> +		};
> +
> +		uart2: serial@0x4806c000 {
> +			compatible = "ti,omap3-uart";
> +			ti,hwmods = "uart2";
> +			clock-frequency = <48000000>;
> +		};
> +
> +		uart3: serial@0x49020000 {
> +			compatible = "ti,omap3-uart";
> +			ti,hwmods = "uart3";
> +			clock-frequency = <48000000>;
> +		};
> +
> +		uart4: serial@0x49042000 {
> +			compatible = "ti,omap3-uart";
> +			ti,hwmods = "uart4";
> +			clock-frequency = <48000000>;
> +		};
>  	};
>  };
> diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
> index 4c61c82..e8fe75f 100644
> --- a/arch/arm/boot/dts/omap4.dtsi
> +++ b/arch/arm/boot/dts/omap4.dtsi
> @@ -21,6 +21,10 @@
>  	interrupt-parent = <&gic>;
>  
>  	aliases {
> +		serial0 = &uart1;
> +		serial1 = &uart2;
> +		serial2 = &uart3;
> +		serial3 = &uart4;
>  	};
>  
>  	cpus {
> @@ -99,5 +103,29 @@
>  			reg = <0x48241000 0x1000>,
>  			      <0x48240100 0x0100>;
>  		};
> +
> +		uart1: serial@0x4806a000 {
> +			compatible = "ti,omap4-uart";
> +			ti,hwmods = "uart1";
> +			clock-frequency = <48000000>;
> +		};
> +
> +		uart2: serial@0x4806c000 {
> +			compatible = "ti,omap4-uart";
> +			ti,hwmods = "uart2";
> +			clock-frequency = <48000000>;
> +		};
> +
> +		uart3: serial@0x48020000 {
> +			compatible = "ti,omap4-uart";
> +			ti,hwmods = "uart3";
> +			clock-frequency = <48000000>;
> +		};
> +
> +		uart4: serial@0x4806e000 {
> +			compatible = "ti,omap4-uart";
> +			ti,hwmods = "uart4";
> +			clock-frequency = <48000000>;
> +		};
>  	};
>  };
> diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
> index fb55fa3..bb72809 100644
> --- a/arch/arm/mach-omap2/board-generic.c
> +++ b/arch/arm/mach-omap2/board-generic.c
> @@ -70,7 +70,6 @@ static void __init omap_generic_init(void)
>  	if (node)
>  		irq_domain_add_simple(node, 0);
>  
> -	omap_serial_init();
>  	omap_sdrc_init(NULL, NULL);
>  
>  	of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);


^ permalink raw reply

* Re: [PATCH v2 3/4] omap-serial: Add minimal device tree support
From: Rob Herring @ 2011-11-28 13:39 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
	govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches
In-Reply-To: <1321969456-24266-4-git-send-email-rnayak@ti.com>

On 11/22/2011 07:44 AM, Rajendra Nayak wrote:
> Adapt the driver to device tree and pass minimal platform
> data from device tree needed for console boot.
> No power management features will be suppported for now
> since it requires more tweaks around OCP settings
> to toggle forceidle/noidle/smaridle bits and handling

typo: smartidle

> remote wakeup and dynamic muxing.
> 
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>

Acked-by: Rob Herring <rob.herring@calxeda.com>

Rob

> ---
>  .../devicetree/bindings/serial/omap_serial.txt     |   10 ++++
>  drivers/tty/serial/omap-serial.c                   |   45 ++++++++++++++++++-
>  2 files changed, 52 insertions(+), 3 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/serial/omap_serial.txt
> 
> diff --git a/Documentation/devicetree/bindings/serial/omap_serial.txt b/Documentation/devicetree/bindings/serial/omap_serial.txt
> new file mode 100644
> index 0000000..342eedd
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/serial/omap_serial.txt
> @@ -0,0 +1,10 @@
> +OMAP UART controller
> +
> +Required properties:
> +- compatible : should be "ti,omap2-uart" for OMAP2 controllers
> +- compatible : should be "ti,omap3-uart" for OMAP3 controllers
> +- compatible : should be "ti,omap4-uart" for OMAP4 controllers
> +- ti,hwmods : Must be "uart<n>", n being the instance number (1-based)
> +
> +Optional properties:
> +- clock-frequency : frequency of the clock input to the UART
> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
> index f14b9c5..5aa524e 100644
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -38,6 +38,7 @@
>  #include <linux/serial_core.h>
>  #include <linux/irq.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/of.h>
>  
>  #include <plat/dma.h>
>  #include <plat/dmtimer.h>
> @@ -1324,6 +1325,19 @@ static void uart_tx_dma_callback(int lch, u16 ch_status, void *data)
>  	return;
>  }
>  
> +static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
> +{
> +	struct omap_uart_port_info *omap_up_info;
> +
> +	omap_up_info = devm_kzalloc(dev, sizeof(*omap_up_info), GFP_KERNEL);
> +	if (!omap_up_info)
> +		return NULL; /* out of memory */
> +
> +	of_property_read_u32(dev->of_node, "clock-frequency",
> +					 &omap_up_info->uartclk);
> +	return omap_up_info;
> +}
> +
>  static int serial_omap_probe(struct platform_device *pdev)
>  {
>  	struct uart_omap_port	*up;
> @@ -1331,6 +1345,9 @@ static int serial_omap_probe(struct platform_device *pdev)
>  	struct omap_uart_port_info *omap_up_info = pdev->dev.platform_data;
>  	int ret = -ENOSPC;
>  
> +	if (pdev->dev.of_node)
> +		omap_up_info = of_get_uart_port_info(&pdev->dev);
> +
>  	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  	if (!mem) {
>  		dev_err(&pdev->dev, "no mem resource?\n");
> @@ -1375,9 +1392,20 @@ static int serial_omap_probe(struct platform_device *pdev)
>  	up->port.regshift = 2;
>  	up->port.fifosize = 64;
>  	up->port.ops = &serial_omap_pops;
> -	up->port.line = pdev->id;
> -	sprintf(up->name, "OMAP UART%d", up->port.line);
>  
> +	if (pdev->dev.of_node)
> +		up->port.line = of_alias_get_id(pdev->dev.of_node, "serial");
> +	else
> +		up->port.line = pdev->id;
> +
> +	if (up->port.line < 0) {
> +		dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n",
> +								up->port.line);
> +		ret = -ENODEV;
> +		goto err;
> +	}
> +
> +	sprintf(up->name, "OMAP UART%d", up->port.line);
>  	up->port.mapbase = mem->start;
>  	up->port.membase = ioremap(mem->start, resource_size(mem));
>  	if (!up->port.membase) {
> @@ -1530,7 +1558,7 @@ static int serial_omap_runtime_suspend(struct device *dev)
>  	if (!up)
>  		return -EINVAL;
>  
> -	if (!pdata->enable_wakeup)
> +	if (!pdata || !pdata->enable_wakeup)
>  		return 0;
>  
>  	if (pdata->get_context_loss_count)
> @@ -1591,12 +1619,23 @@ static const struct dev_pm_ops serial_omap_dev_pm_ops = {
>  				serial_omap_runtime_resume, NULL)
>  };
>  
> +#if defined(CONFIG_OF)
> +static const struct of_device_id omap_serial_of_match[] = {
> +	{ .compatible = "ti,omap2-uart" },
> +	{ .compatible = "ti,omap3-uart" },
> +	{ .compatible = "ti,omap4-uart" },
> +	{},
> +};
> +MODULE_DEVICE_TABLE(of, omap_serial_of_match);
> +#endif
> +
>  static struct platform_driver serial_omap_driver = {
>  	.probe          = serial_omap_probe,
>  	.remove         = serial_omap_remove,
>  	.driver		= {
>  		.name	= DRIVER_NAME,
>  		.pm	= &serial_omap_dev_pm_ops,
> +		.of_match_table = of_match_ptr(omap_serial_of_match),
>  	},
>  };
>  


^ permalink raw reply

* Re: [PATCH] TTY: serial: convert drivers/tty/serial/* to use module_platform_driver()
From: Alan Cox @ 2011-11-28 11:46 UTC (permalink / raw)
  To: Axel Lin
  Cc: linux-kernel, Greg Kroah-Hartman, Arnd Bergmann, Jamie Iles,
	Yoichi Yuasa, linux-serial
In-Reply-To: <1322479335.1939.6.camel@phoenix>

On Mon, 28 Nov 2011 19:22:15 +0800
Axel Lin <axel.lin@gmail.com> wrote:

> This patch converts the drivers in drivers/tty/serial/* to use the
> module_platform_driver() macro which makes the code smaller and a bit
> simpler.

Acked-by: Alan Cox <alan@linux.intel.com>

^ permalink raw reply

* [PATCH] TTY: serial: convert drivers/tty/serial/* to use module_platform_driver()
From: Axel Lin @ 2011-11-28 11:22 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, Alan Cox, Arnd Bergmann, Jamie Iles,
	Yoichi Yuasa, linux-serial

This patch converts the drivers in drivers/tty/serial/* to use the
module_platform_driver() macro which makes the code smaller and a bit
simpler.

Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Alan Cox <alan@linux.intel.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Jamie Iles <jamie@jamieiles.com>
Cc: Yoichi Yuasa <yuasa@linux-mips.org>
Signed-off-by: Axel Lin <axel.lin@gmail.com>
---
 drivers/tty/serial/8250_dw.c    |   12 +-----------
 drivers/tty/serial/sc26xx.c     |   14 +-------------
 drivers/tty/serial/timbuart.c   |   15 +--------------
 drivers/tty/serial/vr41xx_siu.c |   13 +------------
 4 files changed, 4 insertions(+), 50 deletions(-)

diff --git a/drivers/tty/serial/8250_dw.c b/drivers/tty/serial/8250_dw.c
index bf1fba6..f574eef 100644
--- a/drivers/tty/serial/8250_dw.c
+++ b/drivers/tty/serial/8250_dw.c
@@ -177,17 +177,7 @@ static struct platform_driver dw8250_platform_driver = {
 	.remove			= __devexit_p(dw8250_remove),
 };
 
-static int __init dw8250_init(void)
-{
-	return platform_driver_register(&dw8250_platform_driver);
-}
-module_init(dw8250_init);
-
-static void __exit dw8250_exit(void)
-{
-	platform_driver_unregister(&dw8250_platform_driver);
-}
-module_exit(dw8250_exit);
+module_platform_driver(dw8250_platform_driver);
 
 MODULE_AUTHOR("Jamie Iles");
 MODULE_LICENSE("GPL");
diff --git a/drivers/tty/serial/sc26xx.c b/drivers/tty/serial/sc26xx.c
index 75038ad..e0b4b0a 100644
--- a/drivers/tty/serial/sc26xx.c
+++ b/drivers/tty/serial/sc26xx.c
@@ -736,19 +736,7 @@ static struct platform_driver sc26xx_driver = {
 	},
 };
 
-static int __init sc26xx_init(void)
-{
-	return platform_driver_register(&sc26xx_driver);
-}
-
-static void __exit sc26xx_exit(void)
-{
-	platform_driver_unregister(&sc26xx_driver);
-}
-
-module_init(sc26xx_init);
-module_exit(sc26xx_exit);
-
+module_platform_driver(sc26xx_driver);
 
 MODULE_AUTHOR("Thomas Bogendörfer");
 MODULE_DESCRIPTION("SC681/SC2692 serial driver");
diff --git a/drivers/tty/serial/timbuart.c b/drivers/tty/serial/timbuart.c
index e76c8b7..70f9749 100644
--- a/drivers/tty/serial/timbuart.c
+++ b/drivers/tty/serial/timbuart.c
@@ -513,20 +513,7 @@ static struct platform_driver timbuart_platform_driver = {
 	.remove		= __devexit_p(timbuart_remove),
 };
 
-/*--------------------------------------------------------------------------*/
-
-static int __init timbuart_init(void)
-{
-	return platform_driver_register(&timbuart_platform_driver);
-}
-
-static void __exit timbuart_exit(void)
-{
-	platform_driver_unregister(&timbuart_platform_driver);
-}
-
-module_init(timbuart_init);
-module_exit(timbuart_exit);
+module_platform_driver(timbuart_platform_driver);
 
 MODULE_DESCRIPTION("Timberdale UART driver");
 MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/serial/vr41xx_siu.c b/drivers/tty/serial/vr41xx_siu.c
index 3beb6ab..83148e7 100644
--- a/drivers/tty/serial/vr41xx_siu.c
+++ b/drivers/tty/serial/vr41xx_siu.c
@@ -961,18 +961,7 @@ static struct platform_driver siu_device_driver = {
 	},
 };
 
-static int __init vr41xx_siu_init(void)
-{
-	return platform_driver_register(&siu_device_driver);
-}
-
-static void __exit vr41xx_siu_exit(void)
-{
-	platform_driver_unregister(&siu_device_driver);
-}
-
-module_init(vr41xx_siu_init);
-module_exit(vr41xx_siu_exit);
+module_platform_driver(siu_device_driver);
 
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("platform:SIU");
-- 
1.7.5.4



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

^ permalink raw reply related

* Re: [PATCH v2 0/4] OMAP serial device tree support
From: Greg KH @ 2011-11-28  6:31 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
	govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches,
	robherring2
In-Reply-To: <4ED32500.5060908@ti.com>

On Mon, Nov 28, 2011 at 11:36:56AM +0530, Rajendra Nayak wrote:
> On Sunday 27 November 2011 09:06 AM, Greg KH wrote:
> >On Tue, Nov 22, 2011 at 07:14:12PM +0530, Rajendra Nayak wrote:
> >>v2 is based on the latest omap-serial runtime patches, which
> >>can be found here[1]
> >>
> >>The series passes minimal data that allows serial console
> >>boot, with UART's initialised from device tree.
> >>However some of low power support for UART and remote
> >>wakeup needs more work.
> >>Boot tested on OMAP4 panda and OMAP4 sdp boards.
> >>
> >>Patches can be found here..
> >>git://gitorious.org/omap-pm/linux.git for-dt/serial
> >
> >What tree are these going to go through, some device tree one, or do you
> >want me to take the serial driver patches?
> 
> Hi Greg,
> 
> These patches have a dependency on the omap-serial runtime series.
> So once that makes it in, through the serial driver tree, and once we
> have the necessary Acks from the Device Tree maintainers on the relevant
> patches from this series, these could go through the serial driver tree
> as well.

Then all of these should probably go through the device tree tree.

thanks,

greg k-h

^ permalink raw reply

* Re: [PATCH v2 0/4] OMAP serial device tree support
From: Rajendra Nayak @ 2011-11-28  6:06 UTC (permalink / raw)
  To: Greg KH
  Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
	govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches,
	robherring2
In-Reply-To: <20111127033642.GA28378@kroah.com>

On Sunday 27 November 2011 09:06 AM, Greg KH wrote:
> On Tue, Nov 22, 2011 at 07:14:12PM +0530, Rajendra Nayak wrote:
>> v2 is based on the latest omap-serial runtime patches, which
>> can be found here[1]
>>
>> The series passes minimal data that allows serial console
>> boot, with UART's initialised from device tree.
>> However some of low power support for UART and remote
>> wakeup needs more work.
>> Boot tested on OMAP4 panda and OMAP4 sdp boards.
>>
>> Patches can be found here..
>> git://gitorious.org/omap-pm/linux.git for-dt/serial
>
> What tree are these going to go through, some device tree one, or do you
> want me to take the serial driver patches?

Hi Greg,

These patches have a dependency on the omap-serial runtime series.
So once that makes it in, through the serial driver tree, and once we
have the necessary Acks from the Device Tree maintainers on the relevant
patches from this series, these could go through the serial driver tree
as well.

thanks,
Rajendra

>
> thanks,
>
> greg k-h


^ permalink raw reply

* Re: [PATCH 01/16] pmac_zilog: fix unexpected irq
From: Benjamin Herrenschmidt @ 2011-11-28  0:30 UTC (permalink / raw)
  To: Finn Thain
  Cc: Alan Cox, linux-serial, linux-m68k, linuxppc-dev,
	Geert Uytterhoeven
In-Reply-To: <alpine.LNX.2.00.1111250207040.6314@nippy.intranet>


> Removing ifdefs makes the changes more invasive and the suspend/resume 
> code then has to be addressed, which I've avoided.
> 
> The suspend/resume code path can't be tested on m68k macs and the common 
> code paths I can't easily test on a powermac.
> 
> This patch should not be needed because the chip reset shouldn't leave the 
> tx and rx interrupts enabled. Those interrupts are explicitly enabled only 
> after request_irq(), so patching the master interrupt enable behaviour 
> should be redundant. But that's not the case in practice.
> 
> The chip reset code is already messy. I was inclined towards ifdefs and 
> reluctant to share more code after practical experience suggested possible 
> differences in the SCC/ESCC devices.
> 
> I guess I was hoping that the powermac maintainers might prefer ifdefs to 
> increased risk of destabilising the driver on powermacs...
> 
> But a more invasive patch would make for better code. I will see if I can 
> borrow a suitable PCI PowerMac.

Please do the more invasive patch, I'll beat it up on powermacs.

Cheers,
Ben.



^ permalink raw reply

* Re: [PATCH 02/11] TTY: Remove redundant spi driver bus initialization
From: Greg KH @ 2011-11-27  4:17 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-kernel, open list:SERIAL DRIVERS
In-Reply-To: <1322148561-25138-2-git-send-email-lars@metafoo.de>

On Thu, Nov 24, 2011 at 04:29:12PM +0100, Lars-Peter Clausen wrote:
> In ancient times it was necessary to manually initialize the bus field of an
> spi_driver to spi_bus_type. These days this is done in spi_driver_register(),
> so we can drop the manual assignment.
> 
> The patch was generated using the following coccinelle semantic patch:
> // <smpl>
> @@
> identifier _driver;
> @@
> struct spi_driver _driver = {
> 	.driver = {
> -		.bus = &spi_bus_type,
> 	},
> };
> // </smpl>
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> Cc: Alan Cox <alan@linux.intel.com> (maintainer:SERIAL DRIVERS)
> Cc: linux-serial@vger.kernel.org (open list:SERIAL DRIVERS)

The () isn't needed, or nice, as I now need to edit this file by hand
and remove that text.  When applying 400+ patches in a single day, it
gets old fast...

thanks,

greg k-h

^ permalink raw reply

* Re: [PATCH v2 0/4] OMAP serial device tree support
From: Greg KH @ 2011-11-27  3:36 UTC (permalink / raw)
  To: Rajendra Nayak
  Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
	govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches,
	robherring2
In-Reply-To: <1321969456-24266-1-git-send-email-rnayak@ti.com>

On Tue, Nov 22, 2011 at 07:14:12PM +0530, Rajendra Nayak wrote:
> v2 is based on the latest omap-serial runtime patches, which
> can be found here[1]
> 
> The series passes minimal data that allows serial console
> boot, with UART's initialised from device tree.
> However some of low power support for UART and remote
> wakeup needs more work.
> Boot tested on OMAP4 panda and OMAP4 sdp boards.
> 
> Patches can be found here..
> git://gitorious.org/omap-pm/linux.git for-dt/serial

What tree are these going to go through, some device tree one, or do you
want me to take the serial driver patches?

thanks,

greg k-h

^ permalink raw reply

* 2011秋季广交会买家,群发软件+买家搜索机、海关数据,B2B询盘买家500万。
From: 仅10元每天 @ 2011-11-26  3:06 UTC (permalink / raw)
  To: webleon, szsense, mcha, bluestonechina, danny.yue1107, jfttzz,
	ouyangwenchang, lockersolution, hfqinjian, linux-serial,
	webmaster

群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。

1、群发软件: 操作简单,功能强大,模仿人工操作模式,到达率高,日发送5万封以上。 
2、500万买家资源: 赠送的500万买家资源库,更新 (可以按照您的产品提取出来,更精准开发)。 
3、超级海外买家Email搜索机: 内置了600万行业关键词,根据长尾词搜索,结果更精确匹配;每天能搜索1-2万以上买家真实EMAIL,成单率高。 
 

要的抓紧联系QQ: 467643975  
要的抓紧联系QQ: 467643975
要的抓紧联系QQ: 467643975
 
免费赠送:
一共8个包(数据是全行业的,按照行业分好类,并且可以按照关键词查询的): 
1,2011春季+2011秋季广交会买家现场询盘数据库新鲜出炉,超级新鲜买家,新鲜数据,容易成单! 
2,购买后可以免费更新2011秋季广交会+2012春季广交会买家数据。太超值了。
3,最新全球买家库,共451660条数据。 (最新更新日期 2011-05-16日)
4,2008年,2009年,2010年 春季+秋季广交会买家名录,103 104 105 106 107 108 共六届 共120.6万数据。
5,2010年国际促销协会(PPAI)成员名单 PPAI Members Directory,非常重要的大买家。
6,2010年到香港采购的国外客人名录(香港贸发局提供),共7.2万数据,超级重要的买家。
7,48.68万条最新买家询盘,购买后每月更新 1-2万条,包括2部分,1,最新的询盘 2,最新的展会买家。免费更新36个月。
8,2009年海关提单数据piers版数据 1千万。


诚信为本,支持支付宝担保交易 (先发货并安装设置群发软件,然后付款) 彻底打消您的 顾虑。

 


 

精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高

^ permalink raw reply

* 2011秋季广交会买家,群发软件+买家搜索机、海关数据,B2B询盘买家500万。
From: 仅10元每天 @ 2011-11-26  2:23 UTC (permalink / raw)
  To: cwjxiaoguai, peter_wu, msnliandanikesaler, 78364813,
	shwetoverseas, lhy5, kate, minmingg, eble0627, linux-serial

群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。

1、群发软件: 操作简单,功能强大,模仿人工操作模式,到达率高,日发送5万封以上。 
2、500万买家资源: 赠送的500万买家资源库,更新 (可以按照您的产品提取出来,更精准开发)。 
3、超级海外买家Email搜索机: 内置了600万行业关键词,根据长尾词搜索,结果更精确匹配;每天能搜索1-2万以上买家真实EMAIL,成单率高。 
 

要的抓紧联系QQ: 467643975  
要的抓紧联系QQ: 467643975
要的抓紧联系QQ: 467643975
 
免费赠送:
一共8个包(数据是全行业的,按照行业分好类,并且可以按照关键词查询的): 
1,2011春季+2011秋季广交会买家现场询盘数据库新鲜出炉,超级新鲜买家,新鲜数据,容易成单! 
2,购买后可以免费更新2011秋季广交会+2012春季广交会买家数据。太超值了。
3,最新全球买家库,共451660条数据。 (最新更新日期 2011-05-16日)
4,2008年,2009年,2010年 春季+秋季广交会买家名录,103 104 105 106 107 108 共六届 共120.6万数据。
5,2010年国际促销协会(PPAI)成员名单 PPAI Members Directory,非常重要的大买家。
6,2010年到香港采购的国外客人名录(香港贸发局提供),共7.2万数据,超级重要的买家。
7,48.68万条最新买家询盘,购买后每月更新 1-2万条,包括2部分,1,最新的询盘 2,最新的展会买家。免费更新36个月。
8,2009年海关提单数据piers版数据 1千万。


诚信为本,支持支付宝担保交易 (先发货并安装设置群发软件,然后付款) 彻底打消您的 顾虑。

 


 

精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高

^ permalink raw reply

* 2011秋季广交会买家,群发软件+买家搜索机、海关数据,B2B询盘买家500万。
From: 仅10元每天 @ 2011-11-26  1:45 UTC (permalink / raw)
  To: 20000520013736.15313.00000244, broint, joachim-pilling, orff,
	vmhl, sales, xinxi0421, redacted, ring218-829-0088jerryring,
	linux-serial, bj_sshf18

群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。

1、群发软件: 操作简单,功能强大,模仿人工操作模式,到达率高,日发送5万封以上。 
2、500万买家资源: 赠送的500万买家资源库,更新 (可以按照您的产品提取出来,更精准开发)。 
3、超级海外买家Email搜索机: 内置了600万行业关键词,根据长尾词搜索,结果更精确匹配;每天能搜索1-2万以上买家真实EMAIL,成单率高。 
 

要的抓紧联系QQ: 467643975  
要的抓紧联系QQ: 467643975
要的抓紧联系QQ: 467643975
 
免费赠送:
一共8个包(数据是全行业的,按照行业分好类,并且可以按照关键词查询的): 
1,2011春季+2011秋季广交会买家现场询盘数据库新鲜出炉,超级新鲜买家,新鲜数据,容易成单! 
2,购买后可以免费更新2011秋季广交会+2012春季广交会买家数据。太超值了。
3,最新全球买家库,共451660条数据。 (最新更新日期 2011-05-16日)
4,2008年,2009年,2010年 春季+秋季广交会买家名录,103 104 105 106 107 108 共六届 共120.6万数据。
5,2010年国际促销协会(PPAI)成员名单 PPAI Members Directory,非常重要的大买家。
6,2010年到香港采购的国外客人名录(香港贸发局提供),共7.2万数据,超级重要的买家。
7,48.68万条最新买家询盘,购买后每月更新 1-2万条,包括2部分,1,最新的询盘 2,最新的展会买家。免费更新36个月。
8,2009年海关提单数据piers版数据 1千万。


诚信为本,支持支付宝担保交易 (先发货并安装设置群发软件,然后付款) 彻底打消您的 顾虑。

 


 

精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高

^ permalink raw reply

* 2011秋季广交会买家,群发软件+买家搜索机、海关数据,B2B询盘买家500万。
From: 仅10元每天 @ 2011-11-26  1:05 UTC (permalink / raw)
  To: bb59jl8, merryli026, hangfeiyarn, xhwk2007, nancy871008,
	niceniceshop, eble0627, -wzd, stephen_hq, linux-serial,
	phjirodomb

群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
群发软件+2011秋季广交会买家、海关数据、搜索引擎买家,B2B询盘买家共500万,仅10元每天。 
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。

1、群发软件: 操作简单,功能强大,模仿人工操作模式,到达率高,日发送5万封以上。 
2、500万买家资源: 赠送的500万买家资源库,更新 (可以按照您的产品提取出来,更精准开发)。 
3、超级海外买家Email搜索机: 内置了600万行业关键词,根据长尾词搜索,结果更精确匹配;每天能搜索1-2万以上买家真实EMAIL,成单率高。 
 

要的抓紧联系QQ: 467643975  
要的抓紧联系QQ: 467643975
要的抓紧联系QQ: 467643975
 
免费赠送:
一共8个包(数据是全行业的,按照行业分好类,并且可以按照关键词查询的): 
1,2011春季+2011秋季广交会买家现场询盘数据库新鲜出炉,超级新鲜买家,新鲜数据,容易成单! 
2,购买后可以免费更新2011秋季广交会+2012春季广交会买家数据。太超值了。
3,最新全球买家库,共451660条数据。 (最新更新日期 2011-05-16日)
4,2008年,2009年,2010年 春季+秋季广交会买家名录,103 104 105 106 107 108 共六届 共120.6万数据。
5,2010年国际促销协会(PPAI)成员名单 PPAI Members Directory,非常重要的大买家。
6,2010年到香港采购的国外客人名录(香港贸发局提供),共7.2万数据,超级重要的买家。
7,48.68万条最新买家询盘,购买后每月更新 1-2万条,包括2部分,1,最新的询盘 2,最新的展会买家。免费更新36个月。
8,2009年海关提单数据piers版数据 1千万。


诚信为本,支持支付宝担保交易 (先发货并安装设置群发软件,然后付款) 彻底打消您的 顾虑。

 


 

精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高
精准数据-成单率极高

^ permalink raw reply

* 2011秋季广交会买家,群发软件+买家搜索机、海关数据,B2B询盘买家500万。
From: 保证有买家回复 @ 2011-11-25 17:32 UTC (permalink / raw)
  To: q503446241, zssyqt, combjlgfz, wuwanxing1217, yanziaixiaobo,
	linux-serial, thes, diqiyan, feng3163, sun_shine.india, ce2088

群发软件+买家搜索机+110届广交会买家、展会买家、海关数据,B2B询盘买家500万。

一共8个包(数据是全行业的,按照行业分好类,并且可以按照关键词查询的): 
1,2011春季+秋季广交会买家数据库新鲜出炉,超级新鲜买家,新鲜数据,容易成单! 
2,最新全球买家库,共451660条数据。 
3,2008年,2009年,2010年 春季+秋季广交会买家名录,103 104 105 106 107 108 共六届 共120.6万数据。
4,2010年国际促销协会(PPAI)成员名单 PPAI Members Directory,非常重要的大买家。
5,2010年到香港采购的国外客人名录(香港贸发局提供),共7.2万数据,超级重要的买家。
6,60.8万条最新国外B2B买家询盘。
7,2009年海关提单数据piers版数据 1千万。
8,群发软件,群发软件的部署与安装。

共 500万个买家,每个均有Email. 

要的抓紧联系QQ: 467643975   
要的抓紧联系QQ: 467643975   
要的抓紧联系QQ: 467643975
  

诚信为本,如果不信任本人,可以走淘宝交易,收货验证后再付款,这是对您最好的保障了。 

保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。




广交会买家按产品类别分类,分为以下几类:
1 办公设备
2 编织及藤铁工艺品
3 玻璃
4 餐厨用具
5 车辆
6 大型机械及设备
7 电子电气
8 电子消费品
9 纺织
10 服装
11 个人护理
12 工程机械
13 工具
14 化工
15 计算机及通讯
16 家居用品
17 家居装饰
18 家具
19 家用电器
20 建筑及装饰材料
21 节日用品
22 礼品及赠品
23 摩托车
24 汽车配件
25 食品
26 陶瓷
27 铁石
28 玩具
29 卫浴
30 五金
31 小型机械
32 鞋
33 休闲用品
34 医疗
35 浴室产品
36 园林
37 照明产品
38 钟表眼镜
39 自行车
40 包


保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。

^ permalink raw reply

* 2011秋季广交会买家,群发软件+买家搜索机、海关数据,B2B询盘买家500万。
From: 保证有买家回复 @ 2011-11-25 16:38 UTC (permalink / raw)
  To: peter_wu, onlyrope, danielle-babycakes.x, linux-serial,
	phjirodomb, scdjyc, sales, changliangyan, firebirdcreations2010,
	ane.wiersma, jw253765158

群发软件+买家搜索机+110届广交会买家、展会买家、海关数据,B2B询盘买家500万。

一共8个包(数据是全行业的,按照行业分好类,并且可以按照关键词查询的): 
1,2011春季+秋季广交会买家数据库新鲜出炉,超级新鲜买家,新鲜数据,容易成单! 
2,最新全球买家库,共451660条数据。 
3,2008年,2009年,2010年 春季+秋季广交会买家名录,103 104 105 106 107 108 共六届 共120.6万数据。
4,2010年国际促销协会(PPAI)成员名单 PPAI Members Directory,非常重要的大买家。
5,2010年到香港采购的国外客人名录(香港贸发局提供),共7.2万数据,超级重要的买家。
6,60.8万条最新国外B2B买家询盘。
7,2009年海关提单数据piers版数据 1千万。
8,群发软件,群发软件的部署与安装。

共 500万个买家,每个均有Email. 

要的抓紧联系QQ: 467643975   
要的抓紧联系QQ: 467643975   
要的抓紧联系QQ: 467643975
  

诚信为本,如果不信任本人,可以走淘宝交易,收货验证后再付款,这是对您最好的保障了。 

保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。




广交会买家按产品类别分类,分为以下几类:
1 办公设备
2 编织及藤铁工艺品
3 玻璃
4 餐厨用具
5 车辆
6 大型机械及设备
7 电子电气
8 电子消费品
9 纺织
10 服装
11 个人护理
12 工程机械
13 工具
14 化工
15 计算机及通讯
16 家居用品
17 家居装饰
18 家具
19 家用电器
20 建筑及装饰材料
21 节日用品
22 礼品及赠品
23 摩托车
24 汽车配件
25 食品
26 陶瓷
27 铁石
28 玩具
29 卫浴
30 五金
31 小型机械
32 鞋
33 休闲用品
34 医疗
35 浴室产品
36 园林
37 照明产品
38 钟表眼镜
39 自行车
40 包


保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。
保证每天都有买家回复。

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox