linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: hi marek
       [not found] <20101109184220.00003433@unknown>
@ 2010-11-09 18:36 ` Marek Vasut
  2010-11-10  9:07   ` dylan cristiani
  0 siblings, 1 reply; 6+ messages in thread
From: Marek Vasut @ 2010-11-09 18:36 UTC (permalink / raw)
  To: dylan cristiani; +Cc: linux-arm-kernel, linux-input

On Tuesday 09 November 2010 18:42:20 dylan cristiani wrote:
> We heard some month ago, about ucb1400 irq passing, via
> ucb1400_platform_data; then you wrote the patch, that is currently into
> mainline; i've a little problem, probably due to my infinite ignorance:
> i'm writing a sort of my_pm.c driver to check whether the ac line is
> plugged or not, check the main battery voltage and so on (similar to
> arch/arm/mach-pxa/sharpsl_pm.c and corgi_pm.c if you know it); the
> problem is that the battery voltages are tied to the ucb1400 ADC
> inputs, and in my_pm.c driver i don't know how to find the ucb1400_ts
> structure address to call the functions i need to read these ADC input
> i.e.:

1) CC lists

2) Can you post the driver source you have ?

without seeing the source, I can't help you

> unsigned long read_mainbattery_value(void){
> 	....
> 	ucb1400_adc_enable(ucb->ac97);
> 	return ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD0, adcsync);
> 	ucb1400_adc_disable(ucb->ac97);
> 	....
> }
> 
> 
> Wwhere can i find info to set (into my_pm.c module) the
> 	struct ucb1400_ts *ucb = ???
> 
> to be passed to the above function read_mainbattery_value()? the fact
> is that the "ucb1400_ts" device platform is already allocked, added and
> the driver registred by the driver/mfd/ucb1400_core.c module so i don't
> know how to find this structure...
> 
> if it's too stupid question please sorry for the noise...
> 
> thanks a million
> 
> dylan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: hi marek
  2010-11-09 18:36 ` hi marek Marek Vasut
@ 2010-11-10  9:07   ` dylan cristiani
  2010-11-10  9:29     ` Haojian Zhuang
  2010-11-10  9:29     ` Marek Vasut
  0 siblings, 2 replies; 6+ messages in thread
From: dylan cristiani @ 2010-11-10  9:07 UTC (permalink / raw)
  To: Marek Vasut; +Cc: linux-arm-kernel, linux-input

On Tue, 9 Nov 2010 19:36:13 +0100
Marek Vasut <marek.vasut@gmail.com> wrote:

> On Tuesday 09 November 2010 18:42:20 dylan cristiani wrote:
> > We heard some month ago, about ucb1400 irq passing, via
> > ucb1400_platform_data; then you wrote the patch, that is currently
> > into mainline; i've a little problem, probably due to my infinite
> > ignorance: i'm writing a sort of my_pm.c driver to check whether
> > the ac line is plugged or not, check the main battery voltage and
> > so on (similar to arch/arm/mach-pxa/sharpsl_pm.c and corgi_pm.c if
> > you know it); the problem is that the battery voltages are tied to
> > the ucb1400 ADC inputs, and in my_pm.c driver i don't know how to
> > find the ucb1400_ts structure address to call the functions i need
> > to read these ADC input i.e.:
> 
> 1) CC lists
> 
> 2) Can you post the driver source you have ?
> 
> without seeing the source, I can't help you
here it comes but please close your nose before reading....;-)

arch/arm/mach-pxa/nilux_pm.c

/*
 * Based on spitz_pm.c and sharp code.
 *
 * Distributed under term of GPLv2.
 *
 */

#include <linux/module.h>
#include <linux/stat.h>
#include <linux/init.h>
#include <linux/completion.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/gpio.h>
//#include <linux/input.h>
#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/suspend.h>
#include <linux/apm-emulation.h>
#include <linux/platform_device.h>
#include <linux/ucb1400.h>

#include <asm/irq.h>
#include <asm/mach-types.h>
#include <mach/hardware.h>

#include <mach/pm.h>
#include <mach/pxa2xx-regs.h>
#include <mach/regs-rtc.h>
#include <mach/sharpsl_pm.h>


#define AC_IN_INT		17
#define NYLUX_BATT_VOLT		1
#define NYLUX_STATUS_ACIN	4
#define NYLUX_BKUPBATT_TEMP	2
#define NYLUX_CHARGE_STATUS	3


static struct ucb1400_ts *ucb;

static void nylux_charger_init(void)
{
}

static void nylux_charger_exit(void)
{
}

unsigned long nylux_read_main_battery(void)
{
//	struct ucb1400_ts *ucb;
	unsigned int voltage = 0;

	printk(KERN_INFO "Reading_Main_Battery\n");

	ucb1400_adc_enable(ucb->ac97);

//	printk(KERN_INFO "Post adc_enable\n");

	mdelay(1);
	voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD0, 0);
	printk(KERN_INFO "\nVVVVVVvoltage %d\n", voltage);

	ucb1400_adc_disable(ucb->ac97);

	return voltage;
}

unsigned long nylux_read_bkup_battery(void)
{
//	struct ucb1400_ts *ucb;
	unsigned int voltage;

	ucb1400_adc_enable(ucb->ac97);

	mdelay(1);
	voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD1, 0);

	ucb1400_adc_disable(ucb->ac97);
	//printk(KERN_INFO "Battery_bkup value = %d\n", voltage);

	return voltage;
}

unsigned long nylux_charge_status(void)
{
//	struct ucb1400_ts *ucb;
	unsigned int status;

	//printk(KERN_INFO "Charge_status\n");
	ucb1400_adc_enable(ucb->ac97);
	mdelay(1);
	status = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD2, 0);
	//printk(KERN_INFO "Charge status= %d\n", status);
	ucb1400_adc_disable(ucb->ac97);

	return status;

}

static unsigned long nylux_read_devdata(int which)
{
	unsigned long ret = ~0;

	switch (which) {
	case NYLUX_BATT_VOLT:
		ret = nylux_read_main_battery();
		//printk(KERN_INFO "read_main_battery: %d\n", ret);
		break;
	//case NYLUX_BKUPBATT_TEMP:
		//ret = nylux_read_bkup_battery();
		//break;
	//case NYLUX_CHARGE_STATUS:
		//ret = nylux_charge_status();
		//break;
	case NYLUX_STATUS_ACIN: {
		ret = GPLR(AC_IN_INT) & GPIO_bit(AC_IN_INT);
		//printk(KERN_INFO "AC_IN = %d\n", ret);
		//ret = read_ac_status();
		//printk(KERN_INFO "read_ac_status: %d\n", ret);
		break;
	}

	default:
		ret = ~0;
	}

	return ret;

}

//******
struct battery_thresh battery_levels[] = {
	{ 550, 100},
	{ 544,  97},
	{ 541,  93},
	{ 536,  88},
	{ 531,  83},
	{ 526,  78},
	{ 522,  73},
	{ 517,  68},
	{ 514,  63},
	{ 510,  58},
	{ 506,  53},
	{ 503,  48},
	{ 499,  43},
	{ 497,  38},
	{ 495,  33},
	{ 493,  28},
	{ 492,  23},
	{ 491,  18},
	{ 489,  13},
	{ 488,   8},
	{ 484,   3},
	{ 478,   0}
};

struct sharpsl_charger_machinfo nylux_pm_machinfo = {
	.init             = nylux_charger_init,
	.exit		  = nylux_charger_exit,
	.gpio_acin	  = AC_IN_INT,
	.read_devdata	  = nylux_read_devdata,
	.discharge        = 0,
	.discharge1       = 0,
	.charge           = 0,
	.measure_temp     = 0,
	.presuspend       = 0,
	.postsuspend      = 0,
	.charger_wakeup   = 0,
	.should_wakeup    = 0,
	.bat_levels       = 22,
	.bat_levels_noac  = battery_levels,
	.bat_levels_acin  = 0,
	.status_high_acin = 510,
	.status_low_acin  = 490,
	.status_high_noac = 510,
	.status_low_noac  = 490,
	.charge_on_volt	  = 0,
	.charge_on_temp   = 0,
	.charge_acin_high = 0,
	.charge_acin_low  = 0,
	.fatal_acin_volt  = 0,
	.fatal_noacin_volt = 0,

	.batfull_irq	  = 1
};


/*
static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
{
	sharpsl_pm.machinfo = &nylux_pm_machinfo;
	ucb = pdev->ucb;
	return 0;
}

static struct ucb1x00_driver collie_pm_ucb_driver = {
	.add            = collie_pm_ucb_add,
};
*/

static struct platform_device *nyluxpm_device;

static int __devinit nyluxpm_init(void)
{
        int ret;

        nyluxpm_device = platform_device_alloc("sharpsl-pm", -1);
        if (!nyluxpm_device)
                return -ENOMEM;

        nyluxpm_device->dev.platform_data = &nylux_pm_machinfo;
        ret = platform_device_add(nyluxpm_device);

        if (ret)
                platform_device_put(nyluxpm_device);

//	if (!ret)
//		ret = ucb1x00_register_driver(&collie_pm_ucb_driver);

	return ret;
}

static void nyluxpm_exit(void)
{
//	ucb1x00_unregister_driver(&collie_pm_ucb_driver);
        platform_device_unregister(nyluxpm_device);
}

module_init(nyluxpm_init);
module_exit(nyluxpm_exit);


thanks
dylan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: hi marek
  2010-11-10  9:07   ` dylan cristiani
@ 2010-11-10  9:29     ` Haojian Zhuang
  2010-11-10  9:52       ` Marek Vasut
  2010-11-10  9:29     ` Marek Vasut
  1 sibling, 1 reply; 6+ messages in thread
From: Haojian Zhuang @ 2010-11-10  9:29 UTC (permalink / raw)
  To: dylan cristiani; +Cc: Marek Vasut, linux-arm-kernel, linux-input

On Wed, Nov 10, 2010 at 5:07 PM, dylan cristiani
<d.cristiani@idem-tech.it> wrote:
> On Tue, 9 Nov 2010 19:36:13 +0100
> Marek Vasut <marek.vasut@gmail.com> wrote:
>
>> On Tuesday 09 November 2010 18:42:20 dylan cristiani wrote:
>> > We heard some month ago, about ucb1400 irq passing, via
>> > ucb1400_platform_data; then you wrote the patch, that is currently
>> > into mainline; i've a little problem, probably due to my infinite
>> > ignorance: i'm writing a sort of my_pm.c driver to check whether
>> > the ac line is plugged or not, check the main battery voltage and
>> > so on (similar to arch/arm/mach-pxa/sharpsl_pm.c and corgi_pm.c if
>> > you know it); the problem is that the battery voltages are tied to
>> > the ucb1400 ADC inputs, and in my_pm.c driver i don't know how to
>> > find the ucb1400_ts structure address to call the functions i need
>> > to read these ADC input i.e.:
>>
>> 1) CC lists
>>
>> 2) Can you post the driver source you have ?
>>
>> without seeing the source, I can't help you
> here it comes but please close your nose before reading....;-)
>
> arch/arm/mach-pxa/nilux_pm.c
>
> /*
>  * Based on spitz_pm.c and sharp code.
>  *
>  * Distributed under term of GPLv2.
>  *
>  */
>
> #include <linux/module.h>
> #include <linux/stat.h>
> #include <linux/init.h>
> #include <linux/completion.h>
> #include <linux/kernel.h>
> #include <linux/delay.h>
> #include <linux/gpio.h>
> //#include <linux/input.h>
> #include <linux/device.h>
> #include <linux/interrupt.h>
> #include <linux/suspend.h>
> #include <linux/apm-emulation.h>
> #include <linux/platform_device.h>
> #include <linux/ucb1400.h>
>
> #include <asm/irq.h>
> #include <asm/mach-types.h>
> #include <mach/hardware.h>
>
> #include <mach/pm.h>
> #include <mach/pxa2xx-regs.h>
> #include <mach/regs-rtc.h>
> #include <mach/sharpsl_pm.h>
>
>
> #define AC_IN_INT               17
> #define NYLUX_BATT_VOLT         1
> #define NYLUX_STATUS_ACIN       4
> #define NYLUX_BKUPBATT_TEMP     2
> #define NYLUX_CHARGE_STATUS     3
>
>
> static struct ucb1400_ts *ucb;
>
> static void nylux_charger_init(void)
> {
> }
>
> static void nylux_charger_exit(void)
> {
> }
>
> unsigned long nylux_read_main_battery(void)
> {
> //      struct ucb1400_ts *ucb;
>        unsigned int voltage = 0;
>
>        printk(KERN_INFO "Reading_Main_Battery\n");
>
>        ucb1400_adc_enable(ucb->ac97);
>
> //      printk(KERN_INFO "Post adc_enable\n");
>
>        mdelay(1);
>        voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD0, 0);
>        printk(KERN_INFO "\nVVVVVVvoltage %d\n", voltage);
>
>        ucb1400_adc_disable(ucb->ac97);
>
>        return voltage;
> }
>
> unsigned long nylux_read_bkup_battery(void)
> {
> //      struct ucb1400_ts *ucb;
>        unsigned int voltage;
>
>        ucb1400_adc_enable(ucb->ac97);
>
>        mdelay(1);
>        voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD1, 0);
>
>        ucb1400_adc_disable(ucb->ac97);
>        //printk(KERN_INFO "Battery_bkup value = %d\n", voltage);
>
>        return voltage;
> }
>
> unsigned long nylux_charge_status(void)
> {
> //      struct ucb1400_ts *ucb;
>        unsigned int status;
>
>        //printk(KERN_INFO "Charge_status\n");
>        ucb1400_adc_enable(ucb->ac97);
>        mdelay(1);
>        status = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD2, 0);
>        //printk(KERN_INFO "Charge status= %d\n", status);
>        ucb1400_adc_disable(ucb->ac97);
>
>        return status;
>
> }
>
> static unsigned long nylux_read_devdata(int which)
> {
>        unsigned long ret = ~0;
>
>        switch (which) {
>        case NYLUX_BATT_VOLT:
>                ret = nylux_read_main_battery();
>                //printk(KERN_INFO "read_main_battery: %d\n", ret);
>                break;
>        //case NYLUX_BKUPBATT_TEMP:
>                //ret = nylux_read_bkup_battery();
>                //break;
>        //case NYLUX_CHARGE_STATUS:
>                //ret = nylux_charge_status();
>                //break;
>        case NYLUX_STATUS_ACIN: {
>                ret = GPLR(AC_IN_INT) & GPIO_bit(AC_IN_INT);
>                //printk(KERN_INFO "AC_IN = %d\n", ret);
>                //ret = read_ac_status();
>                //printk(KERN_INFO "read_ac_status: %d\n", ret);
>                break;
>        }
>
>        default:
>                ret = ~0;
>        }
>
>        return ret;
>
> }
>
> //******
> struct battery_thresh battery_levels[] = {
>        { 550, 100},
>        { 544,  97},
>        { 541,  93},
>        { 536,  88},
>        { 531,  83},
>        { 526,  78},
>        { 522,  73},
>        { 517,  68},
>        { 514,  63},
>        { 510,  58},
>        { 506,  53},
>        { 503,  48},
>        { 499,  43},
>        { 497,  38},
>        { 495,  33},
>        { 493,  28},
>        { 492,  23},
>        { 491,  18},
>        { 489,  13},
>        { 488,   8},
>        { 484,   3},
>        { 478,   0}
> };
>
> struct sharpsl_charger_machinfo nylux_pm_machinfo = {
>        .init             = nylux_charger_init,
>        .exit             = nylux_charger_exit,
>        .gpio_acin        = AC_IN_INT,
>        .read_devdata     = nylux_read_devdata,
>        .discharge        = 0,
>        .discharge1       = 0,
>        .charge           = 0,
>        .measure_temp     = 0,
>        .presuspend       = 0,
>        .postsuspend      = 0,
>        .charger_wakeup   = 0,
>        .should_wakeup    = 0,
>        .bat_levels       = 22,
>        .bat_levels_noac  = battery_levels,
>        .bat_levels_acin  = 0,
>        .status_high_acin = 510,
>        .status_low_acin  = 490,
>        .status_high_noac = 510,
>        .status_low_noac  = 490,
>        .charge_on_volt   = 0,
>        .charge_on_temp   = 0,
>        .charge_acin_high = 0,
>        .charge_acin_low  = 0,
>        .fatal_acin_volt  = 0,
>        .fatal_noacin_volt = 0,
>
>        .batfull_irq      = 1
> };
>
>
> /*
> static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
> {
>        sharpsl_pm.machinfo = &nylux_pm_machinfo;
>        ucb = pdev->ucb;
>        return 0;
> }
>
> static struct ucb1x00_driver collie_pm_ucb_driver = {
>        .add            = collie_pm_ucb_add,
> };
> */
>
> static struct platform_device *nyluxpm_device;
>
> static int __devinit nyluxpm_init(void)
> {
>        int ret;
>
>        nyluxpm_device = platform_device_alloc("sharpsl-pm", -1);
>        if (!nyluxpm_device)
>                return -ENOMEM;
>
>        nyluxpm_device->dev.platform_data = &nylux_pm_machinfo;
>        ret = platform_device_add(nyluxpm_device);
>
>        if (ret)
>                platform_device_put(nyluxpm_device);
>
> //      if (!ret)
> //              ret = ucb1x00_register_driver(&collie_pm_ucb_driver);
>
>        return ret;
> }
>
> static void nyluxpm_exit(void)
> {
> //      ucb1x00_unregister_driver(&collie_pm_ucb_driver);
>        platform_device_unregister(nyluxpm_device);
> }
>
> module_init(nyluxpm_init);
> module_exit(nyluxpm_exit);
>
>
> thanks
> dylan
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>

You should append your power driver into drivers/power directory.
There's an example of colie_battery.c. It's also based on udc.

Thanks
Haojian
--
To unsubscribe from this list: send the line "unsubscribe linux-input" 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	[flat|nested] 6+ messages in thread

* Re: hi marek
  2010-11-10  9:07   ` dylan cristiani
  2010-11-10  9:29     ` Haojian Zhuang
@ 2010-11-10  9:29     ` Marek Vasut
  1 sibling, 0 replies; 6+ messages in thread
From: Marek Vasut @ 2010-11-10  9:29 UTC (permalink / raw)
  To: dylan cristiani, Mark Brown; +Cc: linux-arm-kernel, linux-input

On Wednesday 10 November 2010 10:07:09 dylan cristiani wrote:
> On Tue, 9 Nov 2010 19:36:13 +0100
> 
> Marek Vasut <marek.vasut@gmail.com> wrote:
> > On Tuesday 09 November 2010 18:42:20 dylan cristiani wrote:
> > > We heard some month ago, about ucb1400 irq passing, via
> > > ucb1400_platform_data; then you wrote the patch, that is currently
> > > into mainline; i've a little problem, probably due to my infinite
> > > ignorance: i'm writing a sort of my_pm.c driver to check whether
> > > the ac line is plugged or not, check the main battery voltage and
> > > so on (similar to arch/arm/mach-pxa/sharpsl_pm.c and corgi_pm.c if
> > > you know it); the problem is that the battery voltages are tied to
> > > the ucb1400 ADC inputs, and in my_pm.c driver i don't know how to
> > > find the ucb1400_ts structure address to call the functions i need
> > 
> > > to read these ADC input i.e.:
> > 1) CC lists
> > 
> > 2) Can you post the driver source you have ?
> > 
> > without seeing the source, I can't help you
> 
> here it comes but please close your nose before reading....;-)
> 
> arch/arm/mach-pxa/nilux_pm.c

1) This should go into drivers/power/...
2) Use the battery framework, there's a gazilion of examples there

> 
> /*
>  * Based on spitz_pm.c and sharp code.
>  *
>  * Distributed under term of GPLv2.
>  *
>  */
> 
> #include <linux/module.h>
> #include <linux/stat.h>
> #include <linux/init.h>
> #include <linux/completion.h>
> #include <linux/kernel.h>
> #include <linux/delay.h>
> #include <linux/gpio.h>
> //#include <linux/input.h>
> #include <linux/device.h>
> #include <linux/interrupt.h>
> #include <linux/suspend.h>
> #include <linux/apm-emulation.h>
> #include <linux/platform_device.h>
> #include <linux/ucb1400.h>
> 
> #include <asm/irq.h>
> #include <asm/mach-types.h>
> #include <mach/hardware.h>
> 
> #include <mach/pm.h>
> #include <mach/pxa2xx-regs.h>
> #include <mach/regs-rtc.h>
> #include <mach/sharpsl_pm.h>
> 
> 
> #define AC_IN_INT		17
> #define NYLUX_BATT_VOLT		1
> #define NYLUX_STATUS_ACIN	4
> #define NYLUX_BKUPBATT_TEMP	2
> #define NYLUX_CHARGE_STATUS	3
> 
> 
> static struct ucb1400_ts *ucb;
> 
> static void nylux_charger_init(void)
> {
> }
> 
> static void nylux_charger_exit(void)
> {
> }
> 
> unsigned long nylux_read_main_battery(void)
> {
> //	struct ucb1400_ts *ucb;
> 	unsigned int voltage = 0;
> 
> 	printk(KERN_INFO "Reading_Main_Battery\n");
> 
> 	ucb1400_adc_enable(ucb->ac97);
> 
> //	printk(KERN_INFO "Post adc_enable\n");
> 
> 	mdelay(1);
> 	voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD0, 0);
> 	printk(KERN_INFO "\nVVVVVVvoltage %d\n", voltage);
> 
> 	ucb1400_adc_disable(ucb->ac97);
> 
> 	return voltage;
> }
> 
> unsigned long nylux_read_bkup_battery(void)
> {
> //	struct ucb1400_ts *ucb;
> 	unsigned int voltage;
> 
> 	ucb1400_adc_enable(ucb->ac97);
> 
> 	mdelay(1);
> 	voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD1, 0);
> 
> 	ucb1400_adc_disable(ucb->ac97);
> 	//printk(KERN_INFO "Battery_bkup value = %d\n", voltage);
> 
> 	return voltage;
> }
> 
> unsigned long nylux_charge_status(void)
> {
> //	struct ucb1400_ts *ucb;
> 	unsigned int status;
> 
> 	//printk(KERN_INFO "Charge_status\n");
> 	ucb1400_adc_enable(ucb->ac97);
> 	mdelay(1);
> 	status = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD2, 0);
> 	//printk(KERN_INFO "Charge status= %d\n", status);
> 	ucb1400_adc_disable(ucb->ac97);
> 
> 	return status;
> 
> }
> 
> static unsigned long nylux_read_devdata(int which)
> {
> 	unsigned long ret = ~0;
> 
> 	switch (which) {
> 	case NYLUX_BATT_VOLT:
> 		ret = nylux_read_main_battery();
> 		//printk(KERN_INFO "read_main_battery: %d\n", ret);
> 		break;
> 	//case NYLUX_BKUPBATT_TEMP:
> 		//ret = nylux_read_bkup_battery();
> 		//break;
> 	//case NYLUX_CHARGE_STATUS:
> 		//ret = nylux_charge_status();
> 		//break;
> 	case NYLUX_STATUS_ACIN: {
> 		ret = GPLR(AC_IN_INT) & GPIO_bit(AC_IN_INT);
> 		//printk(KERN_INFO "AC_IN = %d\n", ret);
> 		//ret = read_ac_status();
> 		//printk(KERN_INFO "read_ac_status: %d\n", ret);
> 		break;
> 	}
> 
> 	default:
> 		ret = ~0;
> 	}
> 
> 	return ret;
> 
> }
> 
> //******
> struct battery_thresh battery_levels[] = {
> 	{ 550, 100},
> 	{ 544,  97},
> 	{ 541,  93},
> 	{ 536,  88},
> 	{ 531,  83},
> 	{ 526,  78},
> 	{ 522,  73},
> 	{ 517,  68},
> 	{ 514,  63},
> 	{ 510,  58},
> 	{ 506,  53},
> 	{ 503,  48},
> 	{ 499,  43},
> 	{ 497,  38},
> 	{ 495,  33},
> 	{ 493,  28},
> 	{ 492,  23},
> 	{ 491,  18},
> 	{ 489,  13},
> 	{ 488,   8},
> 	{ 484,   3},
> 	{ 478,   0}
> };
> 
> struct sharpsl_charger_machinfo nylux_pm_machinfo = {
> 	.init             = nylux_charger_init,
> 	.exit		  = nylux_charger_exit,
> 	.gpio_acin	  = AC_IN_INT,
> 	.read_devdata	  = nylux_read_devdata,
> 	.discharge        = 0,
> 	.discharge1       = 0,
> 	.charge           = 0,
> 	.measure_temp     = 0,
> 	.presuspend       = 0,
> 	.postsuspend      = 0,
> 	.charger_wakeup   = 0,
> 	.should_wakeup    = 0,
> 	.bat_levels       = 22,
> 	.bat_levels_noac  = battery_levels,
> 	.bat_levels_acin  = 0,
> 	.status_high_acin = 510,
> 	.status_low_acin  = 490,
> 	.status_high_noac = 510,
> 	.status_low_noac  = 490,
> 	.charge_on_volt	  = 0,
> 	.charge_on_temp   = 0,
> 	.charge_acin_high = 0,
> 	.charge_acin_low  = 0,
> 	.fatal_acin_volt  = 0,
> 	.fatal_noacin_volt = 0,
> 
> 	.batfull_irq	  = 1
> };
> 
> 
> /*
> static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
> {
> 	sharpsl_pm.machinfo = &nylux_pm_machinfo;
> 	ucb = pdev->ucb;
> 	return 0;
> }
> 
> static struct ucb1x00_driver collie_pm_ucb_driver = {
> 	.add            = collie_pm_ucb_add,
> };
> */
> 
> static struct platform_device *nyluxpm_device;
> 
> static int __devinit nyluxpm_init(void)
> {
>         int ret;
> 
>         nyluxpm_device = platform_device_alloc("sharpsl-pm", -1);
>         if (!nyluxpm_device)
>                 return -ENOMEM;
> 
>         nyluxpm_device->dev.platform_data = &nylux_pm_machinfo;
>         ret = platform_device_add(nyluxpm_device);
> 
>         if (ret)
>                 platform_device_put(nyluxpm_device);
> 
> //	if (!ret)
> //		ret = ucb1x00_register_driver(&collie_pm_ucb_driver);
> 
> 	return ret;
> }
> 
> static void nyluxpm_exit(void)
> {
> //	ucb1x00_unregister_driver(&collie_pm_ucb_driver);
>         platform_device_unregister(nyluxpm_device);
> }
> 
> module_init(nyluxpm_init);
> module_exit(nyluxpm_exit);
> 
> 
> thanks
> dylan

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: hi marek
  2010-11-10  9:29     ` Haojian Zhuang
@ 2010-11-10  9:52       ` Marek Vasut
  2010-11-10 11:09         ` dylan cristiani
  0 siblings, 1 reply; 6+ messages in thread
From: Marek Vasut @ 2010-11-10  9:52 UTC (permalink / raw)
  To: Haojian Zhuang, dylan cristiani
  Cc: Marek Vasut, linux-arm-kernel, linux-input

> On Wed, Nov 10, 2010 at 5:07 PM, dylan cristiani
> <d.cristiani@idem-tech.it> wrote:
> > On Tue, 9 Nov 2010 19:36:13 +0100
> > Marek Vasut <marek.vasut@gmail.com> wrote:
> > 
> > > On Tuesday 09 November 2010 18:42:20 dylan cristiani wrote:
> > > > We heard some month ago, about ucb1400 irq passing, via
> > > > ucb1400_platform_data; then you wrote the patch, that is currently
> > > > into mainline; i've a little problem, probably due to my infinite
> > > > ignorance: i'm writing a sort of my_pm.c driver to check whether
> > > > the ac line is plugged or not, check the main battery voltage and
> > > > so on (similar to arch/arm/mach-pxa/sharpsl_pm.c and corgi_pm.c if
> > > > you know it); the problem is that the battery voltages are tied to
> > > > the ucb1400 ADC inputs, and in my_pm.c driver i don't know how to
> > > > find the ucb1400_ts structure address to call the functions i need
> > > > to read these ADC input i.e.:
> > > 
> > > 1) CC lists
> > > 
> > > 2) Can you post the driver source you have ?
> > > 
> > > without seeing the source, I can't help you
> > here it comes but please close your nose before reading....;-)
> > 
> > arch/arm/mach-pxa/nilux_pm.c
> > 
> > /*
> >  * Based on spitz_pm.c and sharp code.
> >  *
> >  * Distributed under term of GPLv2.
> >  *
> >  */
> > 
> > #include <linux/module.h>
> > #include <linux/stat.h>
> > #include <linux/init.h>
> > #include <linux/completion.h>
> > #include <linux/kernel.h>
> > #include <linux/delay.h>
> > #include <linux/gpio.h>
> > //#include <linux/input.h>
> > #include <linux/device.h>
> > #include <linux/interrupt.h>
> > #include <linux/suspend.h>
> > #include <linux/apm-emulation.h>
> > #include <linux/platform_device.h>
> > #include <linux/ucb1400.h>
> > 
> > #include <asm/irq.h>
> > #include <asm/mach-types.h>
> > #include <mach/hardware.h>
> > 
> > #include <mach/pm.h>
> > #include <mach/pxa2xx-regs.h>
> > #include <mach/regs-rtc.h>
> > #include <mach/sharpsl_pm.h>
> > 
> > 
> > #define AC_IN_INT               17
> > #define NYLUX_BATT_VOLT         1
> > #define NYLUX_STATUS_ACIN       4
> > #define NYLUX_BKUPBATT_TEMP     2
> > #define NYLUX_CHARGE_STATUS     3
> > 
> > 
> > static struct ucb1400_ts *ucb;
> > 
> > static void nylux_charger_init(void)
> > {
> > }
> > 
> > static void nylux_charger_exit(void)
> > {
> > }
> > 
> > unsigned long nylux_read_main_battery(void)
> > {
> > //      struct ucb1400_ts *ucb;
> >        unsigned int voltage = 0;
> > 
> >        printk(KERN_INFO "Reading_Main_Battery\n");
> > 
> >        ucb1400_adc_enable(ucb->ac97);
> > 
> > //      printk(KERN_INFO "Post adc_enable\n");
> > 
> >        mdelay(1);
> >        voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD0, 0);
> >        printk(KERN_INFO "\nVVVVVVvoltage %d\n", voltage);
> > 
> >        ucb1400_adc_disable(ucb->ac97);
> > 
> >        return voltage;
> > }
> > 
> > unsigned long nylux_read_bkup_battery(void)
> > {
> > //      struct ucb1400_ts *ucb;
> >        unsigned int voltage;
> > 
> >        ucb1400_adc_enable(ucb->ac97);
> > 
> >        mdelay(1);
> >        voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD1, 0);
> > 
> >        ucb1400_adc_disable(ucb->ac97);
> >        //printk(KERN_INFO "Battery_bkup value = %d\n", voltage);
> > 
> >        return voltage;
> > }
> > 
> > unsigned long nylux_charge_status(void)
> > {
> > //      struct ucb1400_ts *ucb;
> >        unsigned int status;
> > 
> >        //printk(KERN_INFO "Charge_status\n");
> >        ucb1400_adc_enable(ucb->ac97);
> >        mdelay(1);
> >        status = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD2, 0);
> >        //printk(KERN_INFO "Charge status= %d\n", status);
> >        ucb1400_adc_disable(ucb->ac97);
> > 
> >        return status;
> > 
> > }
> > 
> > static unsigned long nylux_read_devdata(int which)
> > {
> >        unsigned long ret = ~0;
> > 
> >        switch (which) {
> >        case NYLUX_BATT_VOLT:
> >                ret = nylux_read_main_battery();
> >                //printk(KERN_INFO "read_main_battery: %d\n", ret);
> >                break;
> >        //case NYLUX_BKUPBATT_TEMP:
> >                //ret = nylux_read_bkup_battery();
> >                //break;
> >        //case NYLUX_CHARGE_STATUS:
> >                //ret = nylux_charge_status();
> >                //break;
> >        case NYLUX_STATUS_ACIN: {
> >                ret = GPLR(AC_IN_INT) & GPIO_bit(AC_IN_INT);
> >                //printk(KERN_INFO "AC_IN = %d\n", ret);
> >                //ret = read_ac_status();
> >                //printk(KERN_INFO "read_ac_status: %d\n", ret);
> >                break;
> >        }
> > 
> >        default:
> >                ret = ~0;
> >        }
> > 
> >        return ret;
> > 
> > }
> > 
> > //******
> > struct battery_thresh battery_levels[] = {
> >        { 550, 100},
> >        { 544,  97},
> >        { 541,  93},
> >        { 536,  88},
> >        { 531,  83},
> >        { 526,  78},
> >        { 522,  73},
> >        { 517,  68},
> >        { 514,  63},
> >        { 510,  58},
> >        { 506,  53},
> >        { 503,  48},
> >        { 499,  43},
> >        { 497,  38},
> >        { 495,  33},
> >        { 493,  28},
> >        { 492,  23},
> >        { 491,  18},
> >        { 489,  13},
> >        { 488,   8},
> >        { 484,   3},
> >        { 478,   0}
> > };
> > 
> > struct sharpsl_charger_machinfo nylux_pm_machinfo = {
> >        .init             = nylux_charger_init,
> >        .exit             = nylux_charger_exit,
> >        .gpio_acin        = AC_IN_INT,
> >        .read_devdata     = nylux_read_devdata,
> >        .discharge        = 0,
> >        .discharge1       = 0,
> >        .charge           = 0,
> >        .measure_temp     = 0,
> >        .presuspend       = 0,
> >        .postsuspend      = 0,
> >        .charger_wakeup   = 0,
> >        .should_wakeup    = 0,
> >        .bat_levels       = 22,
> >        .bat_levels_noac  = battery_levels,
> >        .bat_levels_acin  = 0,
> >        .status_high_acin = 510,
> >        .status_low_acin  = 490,
> >        .status_high_noac = 510,
> >        .status_low_noac  = 490,
> >        .charge_on_volt   = 0,
> >        .charge_on_temp   = 0,
> >        .charge_acin_high = 0,
> >        .charge_acin_low  = 0,
> >        .fatal_acin_volt  = 0,
> >        .fatal_noacin_volt = 0,
> > 
> >        .batfull_irq      = 1
> > };
> > 
> > 
> > /*
> > static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
> > {
> >        sharpsl_pm.machinfo = &nylux_pm_machinfo;
> >        ucb = pdev->ucb;
> >        return 0;
> > }
> > 
> > static struct ucb1x00_driver collie_pm_ucb_driver = {
> >        .add            = collie_pm_ucb_add,
> > };
> > */
> > 
> > static struct platform_device *nyluxpm_device;
> > 
> > static int __devinit nyluxpm_init(void)
> > {
> >        int ret;
> > 
> >        nyluxpm_device = platform_device_alloc("sharpsl-pm", -1);
> >        if (!nyluxpm_device)
> >                return -ENOMEM;
> > 
> >        nyluxpm_device->dev.platform_data = &nylux_pm_machinfo;
> >        ret = platform_device_add(nyluxpm_device);
> > 
> >        if (ret)
> >                platform_device_put(nyluxpm_device);
> > 
> > //      if (!ret)
> > //              ret = ucb1x00_register_driver(&collie_pm_ucb_driver);
> > 
> >        return ret;
> > }
> > 
> > static void nyluxpm_exit(void)
> > {
> > //      ucb1x00_unregister_driver(&collie_pm_ucb_driver);
> >        platform_device_unregister(nyluxpm_device);
> > }
> > 
> > module_init(nyluxpm_init);
> > module_exit(nyluxpm_exit);
> > 
> > 
> > thanks
> > dylan
> > 
> > _______________________________________________
> > linux-arm-kernel mailing list
> > linux-arm-kernel@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> > 
> 
> You should append your power driver into drivers/power directory.
> There's an example of colie_battery.c. It's also based on udc.

That's basically what I said a few lines above ;-)

btw I think he's also intermixing ucb1x00 (ucb < 1400) and ucb1400
> 
> Thanks
> Haojian

--
To unsubscribe from this list: send the line "unsubscribe linux-input" 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	[flat|nested] 6+ messages in thread

* Re: hi marek
  2010-11-10  9:52       ` Marek Vasut
@ 2010-11-10 11:09         ` dylan cristiani
  0 siblings, 0 replies; 6+ messages in thread
From: dylan cristiani @ 2010-11-10 11:09 UTC (permalink / raw)
  To: Marek Vasut; +Cc: Haojian Zhuang, Marek Vasut, linux-arm-kernel, linux-input

On Wed, 10 Nov 2010 10:52:31 +0100
Marek Vasut <marek.vasut.n900@gmail.com> wrote:

> > On Wed, Nov 10, 2010 at 5:07 PM, dylan cristiani
> > <d.cristiani@idem-tech.it> wrote:
> > > On Tue, 9 Nov 2010 19:36:13 +0100
> > > Marek Vasut <marek.vasut@gmail.com> wrote:
> > > 
> > > > On Tuesday 09 November 2010 18:42:20 dylan cristiani wrote:
> > > > > We heard some month ago, about ucb1400 irq passing, via
> > > > > ucb1400_platform_data; then you wrote the patch, that is
> > > > > currently into mainline; i've a little problem, probably due
> > > > > to my infinite ignorance: i'm writing a sort of my_pm.c
> > > > > driver to check whether the ac line is plugged or not, check
> > > > > the main battery voltage and so on (similar to
> > > > > arch/arm/mach-pxa/sharpsl_pm.c and corgi_pm.c if you know
> > > > > it); the problem is that the battery voltages are tied to the
> > > > > ucb1400 ADC inputs, and in my_pm.c driver i don't know how to
> > > > > find the ucb1400_ts structure address to call the functions i
> > > > > need to read these ADC input i.e.:
> > > > 
> > > > 1) CC lists
> > > > 
> > > > 2) Can you post the driver source you have ?
> > > > 
> > > > without seeing the source, I can't help you
> > > here it comes but please close your nose before reading....;-)
> > > 
> > > arch/arm/mach-pxa/nilux_pm.c
> > > 
> > > /*
> > >  * Based on spitz_pm.c and sharp code.
> > >  *
> > >  * Distributed under term of GPLv2.
> > >  *
> > >  */
> > > 
> > > #include <linux/module.h>
> > > #include <linux/stat.h>
> > > #include <linux/init.h>
> > > #include <linux/completion.h>
> > > #include <linux/kernel.h>
> > > #include <linux/delay.h>
> > > #include <linux/gpio.h>
> > > //#include <linux/input.h>
> > > #include <linux/device.h>
> > > #include <linux/interrupt.h>
> > > #include <linux/suspend.h>
> > > #include <linux/apm-emulation.h>
> > > #include <linux/platform_device.h>
> > > #include <linux/ucb1400.h>
> > > 
> > > #include <asm/irq.h>
> > > #include <asm/mach-types.h>
> > > #include <mach/hardware.h>
> > > 
> > > #include <mach/pm.h>
> > > #include <mach/pxa2xx-regs.h>
> > > #include <mach/regs-rtc.h>
> > > #include <mach/sharpsl_pm.h>
> > > 
> > > 
> > > #define AC_IN_INT               17
> > > #define NYLUX_BATT_VOLT         1
> > > #define NYLUX_STATUS_ACIN       4
> > > #define NYLUX_BKUPBATT_TEMP     2
> > > #define NYLUX_CHARGE_STATUS     3
> > > 
> > > 
> > > static struct ucb1400_ts *ucb;
> > > 
> > > static void nylux_charger_init(void)
> > > {
> > > }
> > > 
> > > static void nylux_charger_exit(void)
> > > {
> > > }
> > > 
> > > unsigned long nylux_read_main_battery(void)
> > > {
> > > //      struct ucb1400_ts *ucb;
> > >        unsigned int voltage = 0;
> > > 
> > >        printk(KERN_INFO "Reading_Main_Battery\n");
> > > 
> > >        ucb1400_adc_enable(ucb->ac97);
> > > 
> > > //      printk(KERN_INFO "Post adc_enable\n");
> > > 
> > >        mdelay(1);
> > >        voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD0, 0);
> > >        printk(KERN_INFO "\nVVVVVVvoltage %d\n", voltage);
> > > 
> > >        ucb1400_adc_disable(ucb->ac97);
> > > 
> > >        return voltage;
> > > }
> > > 
> > > unsigned long nylux_read_bkup_battery(void)
> > > {
> > > //      struct ucb1400_ts *ucb;
> > >        unsigned int voltage;
> > > 
> > >        ucb1400_adc_enable(ucb->ac97);
> > > 
> > >        mdelay(1);
> > >        voltage = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD1, 0);
> > > 
> > >        ucb1400_adc_disable(ucb->ac97);
> > >        //printk(KERN_INFO "Battery_bkup value = %d\n", voltage);
> > > 
> > >        return voltage;
> > > }
> > > 
> > > unsigned long nylux_charge_status(void)
> > > {
> > > //      struct ucb1400_ts *ucb;
> > >        unsigned int status;
> > > 
> > >        //printk(KERN_INFO "Charge_status\n");
> > >        ucb1400_adc_enable(ucb->ac97);
> > >        mdelay(1);
> > >        status = ucb1400_adc_read(ucb->ac97, UCB_ADC_INP_AD2, 0);
> > >        //printk(KERN_INFO "Charge status= %d\n", status);
> > >        ucb1400_adc_disable(ucb->ac97);
> > > 
> > >        return status;
> > > 
> > > }
> > > 
> > > static unsigned long nylux_read_devdata(int which)
> > > {
> > >        unsigned long ret = ~0;
> > > 
> > >        switch (which) {
> > >        case NYLUX_BATT_VOLT:
> > >                ret = nylux_read_main_battery();
> > >                //printk(KERN_INFO "read_main_battery: %d\n", ret);
> > >                break;
> > >        //case NYLUX_BKUPBATT_TEMP:
> > >                //ret = nylux_read_bkup_battery();
> > >                //break;
> > >        //case NYLUX_CHARGE_STATUS:
> > >                //ret = nylux_charge_status();
> > >                //break;
> > >        case NYLUX_STATUS_ACIN: {
> > >                ret = GPLR(AC_IN_INT) & GPIO_bit(AC_IN_INT);
> > >                //printk(KERN_INFO "AC_IN = %d\n", ret);
> > >                //ret = read_ac_status();
> > >                //printk(KERN_INFO "read_ac_status: %d\n", ret);
> > >                break;
> > >        }
> > > 
> > >        default:
> > >                ret = ~0;
> > >        }
> > > 
> > >        return ret;
> > > 
> > > }
> > > 
> > > //******
> > > struct battery_thresh battery_levels[] = {
> > >        { 550, 100},
> > >        { 544,  97},
> > >        { 541,  93},
> > >        { 536,  88},
> > >        { 531,  83},
> > >        { 526,  78},
> > >        { 522,  73},
> > >        { 517,  68},
> > >        { 514,  63},
> > >        { 510,  58},
> > >        { 506,  53},
> > >        { 503,  48},
> > >        { 499,  43},
> > >        { 497,  38},
> > >        { 495,  33},
> > >        { 493,  28},
> > >        { 492,  23},
> > >        { 491,  18},
> > >        { 489,  13},
> > >        { 488,   8},
> > >        { 484,   3},
> > >        { 478,   0}
> > > };
> > > 
> > > struct sharpsl_charger_machinfo nylux_pm_machinfo = {
> > >        .init             = nylux_charger_init,
> > >        .exit             = nylux_charger_exit,
> > >        .gpio_acin        = AC_IN_INT,
> > >        .read_devdata     = nylux_read_devdata,
> > >        .discharge        = 0,
> > >        .discharge1       = 0,
> > >        .charge           = 0,
> > >        .measure_temp     = 0,
> > >        .presuspend       = 0,
> > >        .postsuspend      = 0,
> > >        .charger_wakeup   = 0,
> > >        .should_wakeup    = 0,
> > >        .bat_levels       = 22,
> > >        .bat_levels_noac  = battery_levels,
> > >        .bat_levels_acin  = 0,
> > >        .status_high_acin = 510,
> > >        .status_low_acin  = 490,
> > >        .status_high_noac = 510,
> > >        .status_low_noac  = 490,
> > >        .charge_on_volt   = 0,
> > >        .charge_on_temp   = 0,
> > >        .charge_acin_high = 0,
> > >        .charge_acin_low  = 0,
> > >        .fatal_acin_volt  = 0,
> > >        .fatal_noacin_volt = 0,
> > > 
> > >        .batfull_irq      = 1
> > > };
> > > 
> > > 
> > > /*
> > > static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
> > > {
> > >        sharpsl_pm.machinfo = &nylux_pm_machinfo;
> > >        ucb = pdev->ucb;
> > >        return 0;
> > > }
> > > 
> > > static struct ucb1x00_driver collie_pm_ucb_driver = {
> > >        .add            = collie_pm_ucb_add,
> > > };
> > > */
> > > 
> > > static struct platform_device *nyluxpm_device;
> > > 
> > > static int __devinit nyluxpm_init(void)
> > > {
> > >        int ret;
> > > 
> > >        nyluxpm_device = platform_device_alloc("sharpsl-pm", -1);
> > >        if (!nyluxpm_device)
> > >                return -ENOMEM;
> > > 
> > >        nyluxpm_device->dev.platform_data = &nylux_pm_machinfo;
> > >        ret = platform_device_add(nyluxpm_device);
> > > 
> > >        if (ret)
> > >                platform_device_put(nyluxpm_device);
> > > 
> > > //      if (!ret)
> > > //              ret =
> > > ucb1x00_register_driver(&collie_pm_ucb_driver);
> > > 
> > >        return ret;
> > > }
> > > 
> > > static void nyluxpm_exit(void)
> > > {
> > > //      ucb1x00_unregister_driver(&collie_pm_ucb_driver);
> > >        platform_device_unregister(nyluxpm_device);
> > > }
> > > 
> > > module_init(nyluxpm_init);
> > > module_exit(nyluxpm_exit);
> > > 
> > > 
> > > thanks
> > > dylan
> > > 
> > > _______________________________________________
> > > linux-arm-kernel mailing list
> > > linux-arm-kernel@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> > > 
> > 
> > You should append your power driver into drivers/power directory.
> > There's an example of colie_battery.c. It's also based on udc.
> 
> That's basically what I said a few lines above ;-)
> 
> btw I think he's also intermixing ucb1x00 (ucb < 1400) and ucb1400

first of all thanks for the hint:
i digged a bit into collie_battery.c and i noticed that it uses struct
like 'ucb1x00' and 'ucb1x00_dev' while with ucb1400 i don't have
anything similar just struct 'ucb1400' that is sum of 'ucb1400_ts' and
'ucb1400_gpio', but i don't see how to use these strusctures properly
with my driver in fact 'ucb1x00' has a 'device' member into it while for
instance ucb1400_ts has an 'input_dev' member
--
To unsubscribe from this list: send the line "unsubscribe linux-input" 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	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-11-10 11:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20101109184220.00003433@unknown>
2010-11-09 18:36 ` hi marek Marek Vasut
2010-11-10  9:07   ` dylan cristiani
2010-11-10  9:29     ` Haojian Zhuang
2010-11-10  9:52       ` Marek Vasut
2010-11-10 11:09         ` dylan cristiani
2010-11-10  9:29     ` Marek Vasut

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).