lkml.org 
[lkml]   [2004]   [Dec]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [RFC][PATCH] Add platform_get_resource_byname & platform_get_resource_byirq
Date
Clearly, I'm smoking crack this afternoon and can't create patches out 
of bk. Ignore the fsl_device.h bits of the patch.

- kumar

On Dec 8, 2004, at 5:16 PM, Kumar Gala wrote:

> Adds the ability to find a resource or irq on a platform device by its
> resource name.  This patch also tweaks how resource names get set. 
> Before, resources names were set to pdev->dev.bus_id, now that only
> happens if the resource name has not been previous set.
>
> All of this allows us to find a resource without assuming what order
> the
> resources are in.
>
> Signed-off-by; Kumar Gala <kumar.gala@freescale.com>
>
> --
>
> diff -Nru a/drivers/base/platform.c b/drivers/base/platform.c
> --- a/drivers/base/platform.c   2004-12-08 16:59:52 -06:00
> +++ b/drivers/base/platform.c   2004-12-08 16:59:52 -06:00
> @@ -58,6 +58,42 @@
>  }
>  
>  /**
> + *     platform_get_resource_byname - get a resource for a device by
> name
> + *     @dev: platform device
> + *     @type: resource type
> + *     @name: resource name
> + */
> +struct resource *
> +platform_get_resource_byname(struct platform_device *dev, unsigned
> int type,
> +                     char * name)
> +{
> +       int i;
> +
> +       for (i = 0; i < dev->num_resources; i++) {
> +               struct resource *r = &dev->resource[i];
> +
> +               if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|
> +                                IORESOURCE_IRQ|IORESOURCE_DMA))
> +                   == type)
> +                       if (!strcmp(r->name, name))
> +                               return r;
> +       }
> +       return NULL;
> +}
> +
> +/**
> + *     platform_get_irq - get an IRQ for a device
> + *     @dev: platform device
> + *     @name: IRQ name
> + */
> +int platform_get_irq_byname(struct platform_device *dev, char * name)
> +{
> +       struct resource *r = platform_get_resource_byname(dev,
> IORESOURCE_IRQ, name);
> +
> +       return r ? r->start : 0;
> +}
> +
> +/**
>   *     platform_add_devices - add a numbers of platform devices
>   *     @devs: array of platform devices to add
>   *     @num: number of platform devices in array
> @@ -103,7 +139,8 @@
>         for (i = 0; i < pdev->num_resources; i++) {
>                 struct resource *p, *r = &pdev->resource[i];
>  
> -               r->name = pdev->dev.bus_id;
> +               if (r->name == NULL)
> +                       r->name = pdev->dev.bus_id;
>  
>                 p = NULL;
>                 if (r->flags & IORESOURCE_MEM)
> @@ -308,3 +345,5 @@
>  EXPORT_SYMBOL_GPL(platform_device_unregister);
>  EXPORT_SYMBOL_GPL(platform_get_irq);
>  EXPORT_SYMBOL_GPL(platform_get_resource);
> +EXPORT_SYMBOL_GPL(platform_get_irq_byname);
> +EXPORT_SYMBOL_GPL(platform_get_resource_byname);
> diff -Nru a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h
> --- /dev/null   Wed Dec 31 16:00:00 196900
> +++ b/include/linux/fsl_devices.h       2004-12-08 16:59:52 -06:00
> @@ -0,0 +1,49 @@
> +/*
> + * include/linux/fsl_devices.h
> + *
> + * Definitions for any platform device related flags or structures
> for
> + * Freescale processor devices
> + *
> + * Maintainer: Kumar Gala (kumar.gala@freescale.com)
> + *
> + * Copyright 2004 Freescale Semiconductor, Inc
> + *
> + * This program is free software; you can redistribute  it and/or
> modify it
> + * under  the terms of  the GNU General  Public License as published
> by the
> + * Free Software Foundation;  either version 2 of the  License, or
> (at your
> + * option) any later version.
> + */
> +
> +#ifdef __KERNEL__
> +#ifndef _FSL_DEVICE_H_
> +#define _FSL_DEVICE_H_
> +
> +/* A table of information for supporting the Gianfar Ethernet
> Controller
> + * This helps identify which enet controller we are dealing with,
> + * and what type of enet controller it is
> + */
> +struct gianfar_platform_data {
> +       u32 flags;
> +       u32 phyid;
> +       uint interruptPHY;
> +       uint phyregidx;
> +       char * phydevice;
> +       unsigned char mac_addr[6];
> +};
> +
> +/* Flags related to gianfar device features */
> +#define GIANFAR_HAS_GIGABIT            0x00000001
> +#define GIANFAR_HAS_COALESCE           0x00000002
> +#define GIANFAR_HAS_RMON               0x00000004
> +#define GIANFAR_HAS_MULTI_INTR         0x00000008
> +
> +/* Flags in gianfar_platform_data */
> +#define GIANFAR_PDATA_FIRM_SET_MACADDR 0x00000001
> +#define GIANFAR_PDATA_HAS_PHY_INTR     0x00000002      /* if not set
> use a timer */
> +
> +/* Flags related to I2C device features */
> +#define FSL_I2C_SEPARATE_DFSRR         0x00000001
> +#define FSL_I2C_CLOCK_5200             0x00000002
> +
> +#endif /* _FSL_DEVICE_H_ */
> +#endif /* __KERNEL__ */
> -
> To unsubscribe from this list: send the line "unsubscribe
> linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

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

\
 
 \ /
  Last update: 2005-03-22 14:08    [W:2.948 / U:0.308 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site