ARM: SoC cleanups and fixes for v4.7
Traditionally we've had two separate branches for cleanups and non-critical bug fixes, but both of these got smaller with each release and the differences are rather unclear now, so it seems more appropriate to have a combined branch. The most notably change is for OMAP, which gets a small rework to simplify handling of the AUXDATA mechanism used on machines that are not completely DT based yet, along with other work that is used as preparation for dropping the legacy board files. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIVAwUAVzuXUWCrR//JCVInAQKLTw/7BjSDJGRMsioOJ33Bg3LP92rJHPrVttWc vG8ULnc2QgcFTofDqgyPza2p2XuV868I7jEw4d/qDXOkeIw3ddLKjdCMzHq5r1CO G9W+ZlIw54na/Lh/CMVdMN1M3+64K4Fmp1IiBG66OhhFY8Zg3xterSEBk8V1+00K LNdiq6aJ1yROyHQtYbe+CtqTi/pJ9AmkBoRk4MnfgIMQyywESLlYDRkc3VXWEFXv 3MBszgujEIE1R+XozC2VMDPrirdwjJv71x/tlE0nveOcAIam57B/6e5yLnVCQHpu UCK8x39cj/PwWlwoBExKXNMwbTKCy03AhXjkxDmJ3bD+7FK1sEtFzcyBiwOjiZQq CBttcwqGbtrGIsLbrbpEh9hAWbWNaparbChWW7RBC1sBIG11zd0HVYjzsKppmXsZ 3LUl4KbkGw+grKa+AnsM+e9vGu+J+2vIh9sDVvs0dbXCZp5ILgExbnurxMwbg/J1 QVycR8cjS2vs+79tTfakgVCSADvpdNbMcnYLz9GM5IS9j8bOlOhv1OhKtMFOue6y zCIZyffDJqhU0M3xk78JQSx3Rt4FacDjYJdlqN27AQ125QT2kYmfGR2x/en52ARS 9QwauVp+5WcaoySdWi4TCpOMHV7FP40zhJ3G7TXZARaBccN0kCTfdF/QstLhAa0L u+TVN4A1cBw= =au7y -----END PGP SIGNATURE----- Merge tag 'armsoc-cleanups-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc Pull ARM SoC cleanups and fixes from Arnd Bergmann: "Traditionally we've had two separate branches for cleanups and non-critical bug fixes, but both of these got smaller with each release and the differences are rather unclear now, so it seems more appropriate to have a combined branch. The most notable change is for OMAP, which gets a small rework to simplify handling of the AUXDATA mechanism used on machines that are not completely DT based yet, along with other work that is used as preparation for dropping the legacy board files" * tag 'armsoc-cleanups-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: ARM: dts: exynos: Add interrupt line to MAX8997 PMIC on exynos4210-trats ARM: dts: exynos: Fix regulator name to avoid forbidden character on exynos4210-trats ARM: dts: exynos: Add MFC memory banks for Peach boards ARM: OMAP2+: n900 needs MMC slot names for legacy user space ARM: OMAP2+: Add more functions to pwm pdata for ir-rx51 ARM: debug: remove extraneous DEBUG_HI3716_UART option ARM: OMAP2+: Simplify auxdata by using the generic match of/platform: Allow secondary compatible match in of_dev_lookup ARM: davinci: use IRQCHIP_DECLARE for cp_intc ARM: davinci: remove unused DA8XX_NUM_UARTS ARM: davinci: simplify call to of populate ARM: DaVinci USB: removed deprecated properties from MUSB config ARM: rockchip: Fix use of plain integer as NULL pointer ARM: realview: hide unused 'pmu_device' object soc: versatile: dynamically detect RealView HBI numbers
This commit is contained in:
Коммит
f2b1e0f638
|
@ -268,14 +268,6 @@ choice
|
|||
Say Y here if you want kernel low-level debugging support
|
||||
on HI3620 UART.
|
||||
|
||||
config DEBUG_HI3716_UART
|
||||
bool "Hisilicon Hi3716 Debug UART"
|
||||
depends on ARCH_HI3xxx
|
||||
select DEBUG_UART_PL01X
|
||||
help
|
||||
Say Y here if you want kernel low-level debugging support
|
||||
on HI3716 UART.
|
||||
|
||||
config DEBUG_HIGHBANK_UART
|
||||
bool "Kernel low-level debugging messages via Highbank UART"
|
||||
depends on ARCH_HIGHBANK
|
||||
|
|
|
@ -298,6 +298,8 @@
|
|||
compatible = "maxim,max8997-pmic";
|
||||
|
||||
reg = <0x66>;
|
||||
interrupt-parent = <&gpx0>;
|
||||
interrupts = <7 0>;
|
||||
|
||||
max8997,pmic-buck1-uses-gpio-dvs;
|
||||
max8997,pmic-buck2-uses-gpio-dvs;
|
||||
|
@ -359,7 +361,7 @@
|
|||
};
|
||||
|
||||
vusbdac_reg: LDO8 {
|
||||
regulator-name = "VUSB/VDAC_3.3V_C210";
|
||||
regulator-name = "VUSB+VDAC_3.3V_C210";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
|
|
|
@ -696,6 +696,11 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&mfc {
|
||||
samsung,mfc-r = <0x43000000 0x800000>;
|
||||
samsung,mfc-l = <0x51000000 0x800000>;
|
||||
};
|
||||
|
||||
&mmc_0 {
|
||||
status = "okay";
|
||||
num-slots = <1>;
|
||||
|
|
|
@ -671,6 +671,11 @@
|
|||
status = "okay";
|
||||
};
|
||||
|
||||
&mfc {
|
||||
samsung,mfc-r = <0x43000000 0x800000>;
|
||||
samsung,mfc-l = <0x51000000 0x800000>;
|
||||
};
|
||||
|
||||
&mmc_0 {
|
||||
status = "okay";
|
||||
num-slots = <1>;
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/export.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
|
@ -210,3 +211,5 @@ void __init cp_intc_init(void)
|
|||
{
|
||||
cp_intc_of_init(NULL, NULL);
|
||||
}
|
||||
|
||||
IRQCHIP_DECLARE(cp_intc, "ti,cp-intc", cp_intc_of_init);
|
||||
|
|
|
@ -18,18 +18,6 @@
|
|||
#include "cp_intc.h"
|
||||
#include <mach/da8xx.h>
|
||||
|
||||
#define DA8XX_NUM_UARTS 3
|
||||
|
||||
static const struct of_device_id const da8xx_irq_match[] __initconst = {
|
||||
{ .compatible = "ti,cp-intc", .data = cp_intc_of_init, },
|
||||
{ }
|
||||
};
|
||||
|
||||
static void __init da8xx_init_irq(void)
|
||||
{
|
||||
of_irq_init(da8xx_irq_match);
|
||||
}
|
||||
|
||||
static struct of_dev_auxdata da850_auxdata_lookup[] __initdata = {
|
||||
OF_DEV_AUXDATA("ti,davinci-i2c", 0x01c22000, "i2c_davinci.1", NULL),
|
||||
OF_DEV_AUXDATA("ti,davinci-wdt", 0x01c21000, "davinci-wdt", NULL),
|
||||
|
@ -54,9 +42,7 @@ static struct of_dev_auxdata da850_auxdata_lookup[] __initdata = {
|
|||
|
||||
static void __init da850_init_machine(void)
|
||||
{
|
||||
of_platform_populate(NULL, of_default_bus_match_table,
|
||||
da850_auxdata_lookup, NULL);
|
||||
|
||||
of_platform_default_populate(NULL, da850_auxdata_lookup, NULL);
|
||||
}
|
||||
|
||||
static const char *const da850_boards_compat[] __initconst = {
|
||||
|
@ -68,7 +54,6 @@ static const char *const da850_boards_compat[] __initconst = {
|
|||
|
||||
DT_MACHINE_START(DA850_DT, "Generic DA850/OMAP-L138/AM18x")
|
||||
.map_io = da850_init,
|
||||
.init_irq = da8xx_init_irq,
|
||||
.init_time = davinci_timer_init,
|
||||
.init_machine = da850_init_machine,
|
||||
.dt_compat = da850_boards_compat,
|
||||
|
|
|
@ -19,27 +19,11 @@
|
|||
#define DA8XX_USB1_BASE 0x01e25000
|
||||
|
||||
#if IS_ENABLED(CONFIG_USB_MUSB_HDRC)
|
||||
static struct musb_hdrc_eps_bits musb_eps[] = {
|
||||
{ "ep1_tx", 8, },
|
||||
{ "ep1_rx", 8, },
|
||||
{ "ep2_tx", 8, },
|
||||
{ "ep2_rx", 8, },
|
||||
{ "ep3_tx", 5, },
|
||||
{ "ep3_rx", 5, },
|
||||
{ "ep4_tx", 5, },
|
||||
{ "ep4_rx", 5, },
|
||||
};
|
||||
|
||||
static struct musb_hdrc_config musb_config = {
|
||||
.multipoint = true,
|
||||
.dyn_fifo = true,
|
||||
.soft_con = true,
|
||||
.dma = true,
|
||||
|
||||
.num_eps = 5,
|
||||
.dma_channels = 8,
|
||||
.ram_bits = 10,
|
||||
.eps_bits = musb_eps,
|
||||
};
|
||||
|
||||
static struct musb_hdrc_platform_data usb_data = {
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#include <linux/platform_data/spi-omap2-mcspi.h>
|
||||
#include <linux/platform_data/mtd-onenand-omap2.h>
|
||||
|
||||
#include <plat/dmtimer.h>
|
||||
|
||||
#include <asm/system_info.h>
|
||||
|
||||
#include "common.h"
|
||||
|
@ -47,9 +49,8 @@
|
|||
|
||||
#include <video/omap-panel-data.h>
|
||||
|
||||
#if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE)
|
||||
#include <linux/platform_data/pwm_omap_dmtimer.h>
|
||||
#include <linux/platform_data/media/ir-rx51.h>
|
||||
#endif
|
||||
|
||||
#include "mux.h"
|
||||
#include "omap-pm.h"
|
||||
|
@ -1212,10 +1213,40 @@ static void __init rx51_init_tsc2005(void)
|
|||
gpio_to_irq(RX51_TSC2005_IRQ_GPIO);
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
|
||||
static struct pwm_omap_dmtimer_pdata __maybe_unused pwm_dmtimer_pdata = {
|
||||
.request_by_node = omap_dm_timer_request_by_node,
|
||||
.request_specific = omap_dm_timer_request_specific,
|
||||
.request = omap_dm_timer_request,
|
||||
.set_source = omap_dm_timer_set_source,
|
||||
.get_irq = omap_dm_timer_get_irq,
|
||||
.set_int_enable = omap_dm_timer_set_int_enable,
|
||||
.set_int_disable = omap_dm_timer_set_int_disable,
|
||||
.free = omap_dm_timer_free,
|
||||
.enable = omap_dm_timer_enable,
|
||||
.disable = omap_dm_timer_disable,
|
||||
.get_fclk = omap_dm_timer_get_fclk,
|
||||
.start = omap_dm_timer_start,
|
||||
.stop = omap_dm_timer_stop,
|
||||
.set_load = omap_dm_timer_set_load,
|
||||
.set_match = omap_dm_timer_set_match,
|
||||
.set_pwm = omap_dm_timer_set_pwm,
|
||||
.set_prescaler = omap_dm_timer_set_prescaler,
|
||||
.read_counter = omap_dm_timer_read_counter,
|
||||
.write_counter = omap_dm_timer_write_counter,
|
||||
.read_status = omap_dm_timer_read_status,
|
||||
.write_status = omap_dm_timer_write_status,
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE)
|
||||
static struct lirc_rx51_platform_data rx51_lirc_data = {
|
||||
.set_max_mpu_wakeup_lat = omap_pm_set_max_mpu_wakeup_lat,
|
||||
.pwm_timer = 9, /* Use GPT 9 for CIR */
|
||||
#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
|
||||
.dmtimer = &pwm_dmtimer_pdata,
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
static struct platform_device rx51_lirc_device = {
|
||||
|
|
|
@ -21,9 +21,11 @@
|
|||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <linux/platform_data/pinctrl-single.h>
|
||||
#include <linux/platform_data/hsmmc-omap.h>
|
||||
#include <linux/platform_data/iommu-omap.h>
|
||||
#include <linux/platform_data/wkup_m3.h>
|
||||
#include <linux/platform_data/pwm_omap_dmtimer.h>
|
||||
#include <linux/platform_data/media/ir-rx51.h>
|
||||
#include <plat/dmtimer.h>
|
||||
|
||||
#include "common.h"
|
||||
|
@ -31,10 +33,13 @@
|
|||
#include "dss-common.h"
|
||||
#include "control.h"
|
||||
#include "omap_device.h"
|
||||
#include "omap-pm.h"
|
||||
#include "omap-secure.h"
|
||||
#include "soc.h"
|
||||
#include "hsmmc.h"
|
||||
|
||||
static struct omap_hsmmc_platform_data __maybe_unused mmc_pdata[2];
|
||||
|
||||
struct pdata_init {
|
||||
const char *compatible;
|
||||
void (*fn)(void);
|
||||
|
@ -268,9 +273,13 @@ static struct platform_device omap3_rom_rng_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_device rx51_lirc_device;
|
||||
|
||||
static void __init nokia_n900_legacy_init(void)
|
||||
{
|
||||
hsmmc2_internal_input_clk();
|
||||
mmc_pdata[0].name = "external";
|
||||
mmc_pdata[1].name = "internal";
|
||||
|
||||
if (omap_type() == OMAP2_DEVICE_TYPE_SEC) {
|
||||
if (IS_ENABLED(CONFIG_ARM_ERRATA_430973)) {
|
||||
|
@ -286,6 +295,8 @@ static void __init nokia_n900_legacy_init(void)
|
|||
platform_device_register(&omap3_rom_rng_device);
|
||||
|
||||
}
|
||||
|
||||
platform_device_register(&rx51_lirc_device);
|
||||
}
|
||||
|
||||
static void __init omap3_tao3530_legacy_init(void)
|
||||
|
@ -453,8 +464,14 @@ void omap_auxdata_legacy_init(struct device *dev)
|
|||
|
||||
/* Dual mode timer PWM callbacks platdata */
|
||||
#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
|
||||
struct pwm_omap_dmtimer_pdata pwm_dmtimer_pdata = {
|
||||
static struct pwm_omap_dmtimer_pdata pwm_dmtimer_pdata = {
|
||||
.request_by_node = omap_dm_timer_request_by_node,
|
||||
.request_specific = omap_dm_timer_request_specific,
|
||||
.request = omap_dm_timer_request,
|
||||
.set_source = omap_dm_timer_set_source,
|
||||
.get_irq = omap_dm_timer_get_irq,
|
||||
.set_int_enable = omap_dm_timer_set_int_enable,
|
||||
.set_int_disable = omap_dm_timer_set_int_disable,
|
||||
.free = omap_dm_timer_free,
|
||||
.enable = omap_dm_timer_enable,
|
||||
.disable = omap_dm_timer_disable,
|
||||
|
@ -465,10 +482,29 @@ struct pwm_omap_dmtimer_pdata pwm_dmtimer_pdata = {
|
|||
.set_match = omap_dm_timer_set_match,
|
||||
.set_pwm = omap_dm_timer_set_pwm,
|
||||
.set_prescaler = omap_dm_timer_set_prescaler,
|
||||
.read_counter = omap_dm_timer_read_counter,
|
||||
.write_counter = omap_dm_timer_write_counter,
|
||||
.read_status = omap_dm_timer_read_status,
|
||||
.write_status = omap_dm_timer_write_status,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct lirc_rx51_platform_data __maybe_unused rx51_lirc_data = {
|
||||
.set_max_mpu_wakeup_lat = omap_pm_set_max_mpu_wakeup_lat,
|
||||
.pwm_timer = 9, /* Use GPT 9 for CIR */
|
||||
#if IS_ENABLED(CONFIG_OMAP_DM_TIMER)
|
||||
.dmtimer = &pwm_dmtimer_pdata,
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct platform_device __maybe_unused rx51_lirc_device = {
|
||||
.name = "lirc_rx51",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &rx51_lirc_data,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Few boards still need auxdata populated before we populate
|
||||
* the dev entries in of_platform_populate().
|
||||
|
@ -492,11 +528,10 @@ static struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
|
|||
OF_DEV_AUXDATA("tlv320aic3x", 0x18, "2-0018", &n810_aic33_data),
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002030, "48002030.pinmux", &pcs_pdata),
|
||||
OF_DEV_AUXDATA("ti,omap3-padconf", 0x480025a0, "480025a0.pinmux", &pcs_pdata),
|
||||
OF_DEV_AUXDATA("ti,omap3-padconf", 0x48002a00, "48002a00.pinmux", &pcs_pdata),
|
||||
OF_DEV_AUXDATA("ti,omap2-iommu", 0x5d000000, "5d000000.mmu",
|
||||
&omap3_iommu_pdata),
|
||||
OF_DEV_AUXDATA("ti,omap3-hsmmc", 0x4809c000, "4809c000.mmc", &mmc_pdata[0]),
|
||||
OF_DEV_AUXDATA("ti,omap3-hsmmc", 0x480b4000, "480b4000.mmc", &mmc_pdata[1]),
|
||||
/* Only on am3517 */
|
||||
OF_DEV_AUXDATA("ti,davinci_mdio", 0x5c030000, "davinci_mdio.0", NULL),
|
||||
OF_DEV_AUXDATA("ti,am3517-emac", 0x5c000000, "davinci_emac.0",
|
||||
|
@ -506,19 +541,7 @@ static struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
|
|||
OF_DEV_AUXDATA("ti,am3352-wkup-m3", 0x44d00000, "44d00000.wkup_m3",
|
||||
&wkup_m3_data),
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP4
|
||||
OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a100040, "4a100040.pinmux", &pcs_pdata),
|
||||
OF_DEV_AUXDATA("ti,omap4-padconf", 0x4a31e040, "4a31e040.pinmux", &pcs_pdata),
|
||||
#endif
|
||||
#ifdef CONFIG_SOC_OMAP5
|
||||
OF_DEV_AUXDATA("ti,omap5-padconf", 0x4a002840, "4a002840.pinmux", &pcs_pdata),
|
||||
OF_DEV_AUXDATA("ti,omap5-padconf", 0x4ae0c840, "4ae0c840.pinmux", &pcs_pdata),
|
||||
#endif
|
||||
#ifdef CONFIG_SOC_DRA7XX
|
||||
OF_DEV_AUXDATA("ti,dra7-padconf", 0x4a003400, "4a003400.pinmux", &pcs_pdata),
|
||||
#endif
|
||||
#ifdef CONFIG_SOC_AM43XX
|
||||
OF_DEV_AUXDATA("ti,am437-padconf", 0x44e10800, "44e10800.pinmux", &pcs_pdata),
|
||||
OF_DEV_AUXDATA("ti,am4372-wkup-m3", 0x44d00000, "44d00000.wkup_m3",
|
||||
&wkup_m3_data),
|
||||
#endif
|
||||
|
@ -531,6 +554,8 @@ static struct of_dev_auxdata omap_auxdata_lookup[] __initdata = {
|
|||
OF_DEV_AUXDATA("ti,omap4-iommu", 0x55082000, "55082000.mmu",
|
||||
&omap4_iommu_pdata),
|
||||
#endif
|
||||
/* Common auxdata */
|
||||
OF_DEV_AUXDATA("pinctrl-single", 0, NULL, &pcs_pdata),
|
||||
{ /* sentinel */ },
|
||||
};
|
||||
|
||||
|
|
|
@ -248,6 +248,7 @@ static struct resource realview_pbx_isp1761_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
static struct resource pmu_resources[] = {
|
||||
[0] = {
|
||||
.start = IRQ_PBX_PMU_CPU0,
|
||||
|
@ -277,6 +278,7 @@ static struct platform_device pmu_device = {
|
|||
.num_resources = ARRAY_SIZE(pmu_resources),
|
||||
.resource = pmu_resources,
|
||||
};
|
||||
#endif
|
||||
|
||||
static void __init gic_init_irq(void)
|
||||
{
|
||||
|
|
|
@ -65,7 +65,7 @@ static struct reset_control *rockchip_get_core_reset(int cpu)
|
|||
if (dev)
|
||||
np = dev->of_node;
|
||||
else
|
||||
np = of_get_cpu_node(cpu, 0);
|
||||
np = of_get_cpu_node(cpu, NULL);
|
||||
|
||||
return of_reset_control_get(np, NULL);
|
||||
}
|
||||
|
|
|
@ -297,19 +297,37 @@ static struct amba_device *of_amba_device_create(struct device_node *node,
|
|||
static const struct of_dev_auxdata *of_dev_lookup(const struct of_dev_auxdata *lookup,
|
||||
struct device_node *np)
|
||||
{
|
||||
const struct of_dev_auxdata *auxdata;
|
||||
struct resource res;
|
||||
int compatible = 0;
|
||||
|
||||
if (!lookup)
|
||||
return NULL;
|
||||
|
||||
for(; lookup->compatible != NULL; lookup++) {
|
||||
if (!of_device_is_compatible(np, lookup->compatible))
|
||||
auxdata = lookup;
|
||||
for (; auxdata->compatible; auxdata++) {
|
||||
if (!of_device_is_compatible(np, auxdata->compatible))
|
||||
continue;
|
||||
compatible++;
|
||||
if (!of_address_to_resource(np, 0, &res))
|
||||
if (res.start != lookup->phys_addr)
|
||||
if (res.start != auxdata->phys_addr)
|
||||
continue;
|
||||
pr_debug("%s: devname=%s\n", np->full_name, lookup->name);
|
||||
return lookup;
|
||||
pr_debug("%s: devname=%s\n", np->full_name, auxdata->name);
|
||||
return auxdata;
|
||||
}
|
||||
|
||||
if (!compatible)
|
||||
return NULL;
|
||||
|
||||
/* Try compatible match if no phys_addr and name are specified */
|
||||
auxdata = lookup;
|
||||
for (; auxdata->compatible; auxdata++) {
|
||||
if (!of_device_is_compatible(np, auxdata->compatible))
|
||||
continue;
|
||||
if (!auxdata->phys_addr && !auxdata->name) {
|
||||
pr_debug("%s: compatible match\n", np->full_name);
|
||||
return auxdata;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
|
@ -31,18 +31,6 @@ static const struct of_device_id realview_soc_of_match[] = {
|
|||
|
||||
static u32 realview_coreid;
|
||||
|
||||
static const char *realview_board_str(u32 id)
|
||||
{
|
||||
switch ((id >> 16) & 0xfff) {
|
||||
case 0x0147:
|
||||
return "HBI-0147";
|
||||
case 0x0159:
|
||||
return "HBI-0159";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
static const char *realview_arch_str(u32 id)
|
||||
{
|
||||
switch ((id >> 8) & 0xf) {
|
||||
|
@ -69,7 +57,7 @@ static ssize_t realview_get_board(struct device *dev,
|
|||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return sprintf(buf, "%s\n", realview_board_str(realview_coreid));
|
||||
return sprintf(buf, "HBI-%03x\n", ((realview_coreid >> 16) & 0xfff));
|
||||
}
|
||||
|
||||
static struct device_attribute realview_board_attr =
|
||||
|
@ -133,8 +121,9 @@ static int realview_soc_probe(struct platform_device *pdev)
|
|||
device_create_file(soc_device_to_device(soc_dev), &realview_arch_attr);
|
||||
device_create_file(soc_device_to_device(soc_dev), &realview_build_attr);
|
||||
|
||||
dev_info(&pdev->dev, "RealView Syscon Core ID: 0x%08x\n",
|
||||
realview_coreid);
|
||||
dev_info(&pdev->dev, "RealView Syscon Core ID: 0x%08x, HBI-%03x\n",
|
||||
realview_coreid,
|
||||
((realview_coreid >> 16) & 0xfff));
|
||||
/* FIXME: add attributes for SoC to sysfs */
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ struct lirc_rx51_platform_data {
|
|||
int pwm_timer;
|
||||
|
||||
int(*set_max_mpu_wakeup_lat)(struct device *dev, long t);
|
||||
struct pwm_omap_dmtimer_pdata *dmtimer;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -35,6 +35,16 @@
|
|||
#ifndef __PWM_OMAP_DMTIMER_PDATA_H
|
||||
#define __PWM_OMAP_DMTIMER_PDATA_H
|
||||
|
||||
/* clock sources */
|
||||
#define PWM_OMAP_DMTIMER_SRC_SYS_CLK 0x00
|
||||
#define PWM_OMAP_DMTIMER_SRC_32_KHZ 0x01
|
||||
#define PWM_OMAP_DMTIMER_SRC_EXT_CLK 0x02
|
||||
|
||||
/* timer interrupt enable bits */
|
||||
#define PWM_OMAP_DMTIMER_INT_CAPTURE (1 << 2)
|
||||
#define PWM_OMAP_DMTIMER_INT_OVERFLOW (1 << 1)
|
||||
#define PWM_OMAP_DMTIMER_INT_MATCH (1 << 0)
|
||||
|
||||
/* trigger types */
|
||||
#define PWM_OMAP_DMTIMER_TRIGGER_NONE 0x00
|
||||
#define PWM_OMAP_DMTIMER_TRIGGER_OVERFLOW 0x01
|
||||
|
@ -45,15 +55,23 @@ typedef struct omap_dm_timer pwm_omap_dmtimer;
|
|||
|
||||
struct pwm_omap_dmtimer_pdata {
|
||||
pwm_omap_dmtimer *(*request_by_node)(struct device_node *np);
|
||||
pwm_omap_dmtimer *(*request_specific)(int timer_id);
|
||||
pwm_omap_dmtimer *(*request)(void);
|
||||
|
||||
int (*free)(pwm_omap_dmtimer *timer);
|
||||
|
||||
void (*enable)(pwm_omap_dmtimer *timer);
|
||||
void (*disable)(pwm_omap_dmtimer *timer);
|
||||
|
||||
int (*get_irq)(pwm_omap_dmtimer *timer);
|
||||
int (*set_int_enable)(pwm_omap_dmtimer *timer, unsigned int value);
|
||||
int (*set_int_disable)(pwm_omap_dmtimer *timer, u32 mask);
|
||||
|
||||
struct clk *(*get_fclk)(pwm_omap_dmtimer *timer);
|
||||
|
||||
int (*start)(pwm_omap_dmtimer *timer);
|
||||
int (*stop)(pwm_omap_dmtimer *timer);
|
||||
int (*set_source)(pwm_omap_dmtimer *timer, int source);
|
||||
|
||||
int (*set_load)(pwm_omap_dmtimer *timer, int autoreload,
|
||||
unsigned int value);
|
||||
|
@ -63,7 +81,10 @@ struct pwm_omap_dmtimer_pdata {
|
|||
int toggle, int trigger);
|
||||
int (*set_prescaler)(pwm_omap_dmtimer *timer, int prescaler);
|
||||
|
||||
unsigned int (*read_counter)(pwm_omap_dmtimer *timer);
|
||||
int (*write_counter)(pwm_omap_dmtimer *timer, unsigned int value);
|
||||
unsigned int (*read_status)(pwm_omap_dmtimer *timer);
|
||||
int (*write_status)(pwm_omap_dmtimer *timer, unsigned int value);
|
||||
};
|
||||
|
||||
#endif /* __PWM_OMAP_DMTIMER_PDATA_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче