]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
WiP: tx28-dt-devel tx28-dt-devel kc/tx28-dt-devel
authorLothar Waßmann <LW@KARO-electronics.de>
Mon, 3 Sep 2012 13:42:01 +0000 (15:42 +0200)
committerLothar Waßmann <LW@KARO-electronics.de>
Mon, 3 Sep 2012 13:42:01 +0000 (15:42 +0200)
12 files changed:
arch/arm/mach-mxs/mach-mxs.c
drivers/input/matrix-keymap.c
drivers/regulator/fixed.c
drivers/regulator/gpio-regulator.c
drivers/video/backlight/pwm_bl.c
drivers/video/logo/Kconfig
drivers/video/logo/Makefile
drivers/video/mxsfb.c
include/linux/mxsfb.h
sound/soc/Kconfig
sound/soc/mxs/mxs-saif.c
sound/soc/soc-dmaengine-pcm.c

index d696199ab238d825f62bc52df683010d49de73ab..acd6df1a6bfef9ce02128b03bea88f77d581aa6b 100644 (file)
@@ -44,7 +44,7 @@ static struct fb_videomode mx23evk_video_modes[] = {
                .hsync_len      = 1,
                .vsync_len      = 1,
                .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT |
-                                 FB_SYNC_DOTCLK_FAILING_ACT,
+                                 FB_SYNC_DOTCLK_FALLING_ACT,
        },
 };
 
@@ -62,7 +62,7 @@ static struct fb_videomode mx28evk_video_modes[] = {
                .hsync_len      = 10,
                .vsync_len      = 10,
                .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT |
-                                 FB_SYNC_DOTCLK_FAILING_ACT,
+                                 FB_SYNC_DOTCLK_FALLING_ACT,
        },
 };
 
@@ -98,7 +98,135 @@ static struct fb_videomode apx4devkit_video_modes[] = {
                .vsync_len      = 3,
                .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT |
                                  FB_SYNC_DATA_ENABLE_HIGH_ACT |
-                                 FB_SYNC_DOTCLK_FAILING_ACT,
+                                 FB_SYNC_DOTCLK_FALLING_ACT,
+       },
+};
+
+static struct fb_videomode tx28_video_modes[] = {
+       {
+               /* Standard VGA timing */
+               .name           = "VGA",
+               .refresh        = 60,
+               .xres           = 640,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(25175),
+               .left_margin    = 48,
+               .hsync_len      = 96,
+               .right_margin   = 16,
+               .upper_margin   = 33,
+               .vsync_len      = 2,
+               .lower_margin   = 10,
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+               .vmode          = FB_VMODE_NONINTERLACED,
+       },
+       {
+               /* Emerging ETV570 640 x 480 display. Syncs low active,
+                * DE high active, 115.2 mm x 86.4 mm display area
+                * VGA compatible timing
+                */
+               .name           = "ETV570",
+               .refresh        = 60,
+               .xres           = 640,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(25175),
+               .left_margin    = 114,
+               .hsync_len      = 30,
+               .right_margin   = 16,
+               .upper_margin   = 32,
+               .vsync_len      = 3,
+               .lower_margin   = 10,
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+               .vmode          = FB_VMODE_NONINTERLACED,
+       },
+       {
+               /* Emerging ET0350G0DH6 320 x 240 display.
+                * 70.08 mm x 52.56 mm display area.
+                */
+               .name           = "ET0350",
+               .refresh        = 60,
+               .xres           = 320,
+               .yres           = 240,
+               .pixclock       = KHZ2PICOS(6500),
+               .left_margin    = 68 - 34,
+               .hsync_len      = 34,
+               .right_margin   = 20,
+               .upper_margin   = 18 - 3,
+               .vsync_len      = 3,
+               .lower_margin   = 4,
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+               .vmode          = FB_VMODE_NONINTERLACED,
+       },
+       {
+               /* Emerging ET0430G0DH6 480 x 272 display.
+                * 95.04 mm x 53.856 mm display area.
+                */
+               .name           = "ET0430",
+               .refresh        = 60,
+               .xres           = 480,
+               .yres           = 272,
+               .pixclock       = KHZ2PICOS(9000),
+               .left_margin    = 2,
+               .hsync_len      = 41,
+               .right_margin   = 2,
+               .upper_margin   = 2,
+               .vsync_len      = 10,
+               .lower_margin   = 2,
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+               .vmode          = FB_VMODE_NONINTERLACED,
+       },
+       {
+               /* Emerging ET0500G0DH6 800 x 480 display.
+                * 109.6 mm x 66.4 mm display area.
+                */
+               .name           = "ET0500",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(33260),
+               .left_margin    = 216 - 128,
+               .hsync_len      = 128,
+               .right_margin   = 1056 - 800 - 216,
+               .upper_margin   = 35 - 2,
+               .vsync_len      = 2,
+               .lower_margin   = 525 - 480 - 35,
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+               .vmode          = FB_VMODE_NONINTERLACED,
+       },
+       {
+               /* Emerging ETQ570G0DH6 320 x 240 display.
+                * 115.2 mm x 86.4 mm display area.
+                */
+               .name           = "ETQ570",
+               .refresh        = 60,
+               .xres           = 320,
+               .yres           = 240,
+               .pixclock       = KHZ2PICOS(6400),
+               .left_margin    = 38,
+               .hsync_len      = 30,
+               .right_margin   = 30,
+               .upper_margin   = 16, /* 15 according to datasheet */
+               .vsync_len      = 3, /* TVP -> 1>x>5 */
+               .lower_margin   = 4, /* 4.5 according to datasheet */
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+               .vmode          = FB_VMODE_NONINTERLACED,
+       },
+       {
+               /* Emerging ET0700G0DH6 800 x 480 display.
+                * 152.4 mm x 91.44 mm display area.
+                */
+               .name           = "ET0700",
+               .refresh        = 60,
+               .xres           = 800,
+               .yres           = 480,
+               .pixclock       = KHZ2PICOS(33260),
+               .left_margin    = 216 - 128,
+               .hsync_len      = 128,
+               .right_margin   = 1056 - 800 - 216,
+               .upper_margin   = 35 - 2,
+               .vsync_len      = 2,
+               .lower_margin   = 525 - 480 - 35,
+               .sync           = FB_SYNC_DATA_ENABLE_HIGH_ACT,
+               .vmode          = FB_VMODE_NONINTERLACED,
        },
 };
 
@@ -333,6 +461,8 @@ static const struct gpio tx28_gpios[] __initconst = {
        { TX28_FEC_nINT, GPIOF_DIR_IN, "fec-int" },
 };
 
+#include <linux/of_fdt.h>
+
 static void __init tx28_post_init(void)
 {
        struct device_node *np;
@@ -342,6 +472,11 @@ static void __init tx28_post_init(void)
 
        enable_clk_enet_out();
 
+       mxsfb_pdata.mode_list = tx28_video_modes;
+       mxsfb_pdata.mode_count = ARRAY_SIZE(tx28_video_modes);
+       mxsfb_pdata.default_bpp = 32;
+       mxsfb_pdata.ld_intf_width = STMLCDIF_24BIT;
+
        np = of_find_compatible_node(NULL, NULL, "fsl,imx28-fec");
        pdev = of_find_device_by_node(np);
        if (!pdev) {
@@ -388,13 +523,12 @@ static void __init mxs_machine_init(void)
                m28evk_init();
        else if (of_machine_is_compatible("bluegiga,apx4devkit"))
                apx4devkit_init();
+       else if (of_machine_is_compatible("karo,tx28"))
+               tx28_post_init();
 
        of_platform_populate(NULL, of_default_bus_match_table,
                             mxs_auxdata_lookup, NULL);
 
-       if (of_machine_is_compatible("karo,tx28"))
-               tx28_post_init();
-
        if (of_machine_is_compatible("fsl,imx28-evk"))
                imx28_evk_post_init();
 }
index 443ad64b7f2a2344ff6e8801dfe2c7f0a1e0a0a1..ee7de0beda3b85c657109c7bc226c072c8149ccf 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <linux/device.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/types.h>
 #include <linux/input.h>
 #include <linux/of.h>
@@ -161,3 +162,5 @@ int matrix_keypad_build_keymap(const struct matrix_keymap_data *keymap_data,
        return 0;
 }
 EXPORT_SYMBOL(matrix_keypad_build_keymap);
+
+MODULE_LICENSE("GPL v2");
index 185468c4d38fcbe691c7842ca9a0f50068ca5e25..7e0a35f07668f22efeb6cc9e16834c23798c39be 100644 (file)
@@ -162,7 +162,8 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
 
        drvdata->desc.name = kstrdup(config->supply_name, GFP_KERNEL);
        if (drvdata->desc.name == NULL) {
-               dev_err(&pdev->dev, "Failed to allocate supply name\n");
+               dev_err(&pdev->dev, "Failed to allocate supply name: '%s'\n",
+                       config->supply_name);
                ret = -ENOMEM;
                goto err;
        }
index 8b5944f2d7d1ddd36e82e92d786770e469743dfe..bbd625e93f8c298674beef508e20fc60be58f52c 100644 (file)
@@ -150,7 +150,8 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev)
 
        drvdata->desc.name = kstrdup(config->supply_name, GFP_KERNEL);
        if (drvdata->desc.name == NULL) {
-               dev_err(&pdev->dev, "Failed to allocate supply name\n");
+               dev_err(&pdev->dev, "Failed to allocate supply name '%s'\n",
+                       config->supply_name);
                ret = -ENOMEM;
                goto err;
        }
index 995f0164c9b082c7da2836123adfcb2b7f10a6c7..b55b96b0418779bc4c09091508009aa1b5113b74 100644 (file)
@@ -58,7 +58,10 @@ static int pwm_backlight_update_status(struct backlight_device *bl)
 
                if (pb->levels) {
                        duty_cycle = pb->levels[brightness];
-                       max = pb->levels[max];
+                       if (pb->levels[max] > pb->levels[0])
+                               max = pb->levels[max];
+                       else
+                               max = pb->levels[0];
                } else {
                        duty_cycle = brightness;
                }
@@ -202,10 +205,14 @@ static int pwm_backlight_probe(struct platform_device *pdev)
        }
 
        if (data->levels) {
-               max = data->levels[data->max_brightness];
+               if (data->levels[data->max_brightness] > data->levels[0])
+                       max = data->levels[data->max_brightness];
+               else
+                       max = data->levels[0];
                pb->levels = data->levels;
-       } else
+       } else {
                max = data->max_brightness;
+       }
 
        pb->notify = data->notify;
        pb->notify_after = data->notify_after;
index 39ac49e0682ced1eef75c5e0b31426e4efe26975..629477a6899ddd147e35bce86b08e2581ea359f9 100644 (file)
@@ -82,4 +82,9 @@ config LOGO_M32R_CLUT224
        depends on M32R
        default y
 
+config LOGO_KARO_CLUT224
+       bool "224-color Ka-Ro Linux logo"
+       depends on ARM
+       default y
+       
 endif # LOGO
index 3b437813584cec4f3d73ba5364353ac4a5cbb29b..168d14c2b2ed684ecba098c14cf6ec1df15469e0 100644 (file)
@@ -15,6 +15,7 @@ obj-$(CONFIG_LOGO_SUPERH_MONO)                += logo_superh_mono.o
 obj-$(CONFIG_LOGO_SUPERH_VGA16)                += logo_superh_vga16.o
 obj-$(CONFIG_LOGO_SUPERH_CLUT224)      += logo_superh_clut224.o
 obj-$(CONFIG_LOGO_M32R_CLUT224)                += logo_m32r_clut224.o
+obj-$(CONFIG_LOGO_KARO_CLUT224)                += logo_karo_clut224.o
 
 obj-$(CONFIG_SPU_BASE)                 += logo_spe_clut224.o
 
index 49619b4415000efc1ef87756d09667017a682244..1d9b6ee4d8db421f0198ef0229a7b0fd5e7b9e39 100644 (file)
@@ -50,6 +50,9 @@
 #include <linux/pinctrl/consumer.h>
 #include <linux/mxsfb.h>
 
+static char *mode;
+module_param(mode, charp, S_IRUGO);
+
 #define REG_SET        4
 #define REG_CLR        8
 
 #define VDCTRL0_ENABLE_PRESENT         (1 << 28)
 #define VDCTRL0_VSYNC_ACT_HIGH         (1 << 27)
 #define VDCTRL0_HSYNC_ACT_HIGH         (1 << 26)
-#define VDCTRL0_DOTCLK_ACT_FAILING     (1 << 25)
+#define VDCTRL0_DOTCLK_ACT_FALLING     (1 << 25)
 #define VDCTRL0_ENABLE_ACT_HIGH                (1 << 24)
 #define VDCTRL0_VSYNC_PERIOD_UNIT      (1 << 21)
 #define VDCTRL0_VSYNC_PULSE_WIDTH_UNIT (1 << 20)
@@ -369,7 +372,8 @@ static void mxsfb_disable_controller(struct fb_info *fb_info)
                loop--;
        }
 
-       writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR);
+       reg = readl(host->base + LCDC_VDCTRL4);
+       writel(reg & ~VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4);
 
        clk_disable_unprepare(host->clk);
 
@@ -457,8 +461,8 @@ static int mxsfb_set_par(struct fb_info *fb_info)
                vdctrl0 |= VDCTRL0_VSYNC_ACT_HIGH;
        if (fb_info->var.sync & FB_SYNC_DATA_ENABLE_HIGH_ACT)
                vdctrl0 |= VDCTRL0_ENABLE_ACT_HIGH;
-       if (fb_info->var.sync & FB_SYNC_DOTCLK_FAILING_ACT)
-               vdctrl0 |= VDCTRL0_DOTCLK_ACT_FAILING;
+       if (fb_info->var.sync & FB_SYNC_DOTCLK_FALLING_ACT)
+               vdctrl0 |= VDCTRL0_DOTCLK_ACT_FALLING;
 
        writel(vdctrl0, host->base + LCDC_VDCTRL0);
 
@@ -780,7 +784,7 @@ static int __devinit mxsfb_probe(struct platform_device *pdev)
        struct resource *res;
        struct mxsfb_info *host;
        struct fb_info *fb_info;
-       struct fb_modelist *modelist;
+       struct fb_modelist *modelist = NULL;
        struct pinctrl *pinctrl;
        int panel_enable;
        enum of_gpio_flags flags;
@@ -864,11 +868,21 @@ static int __devinit mxsfb_probe(struct platform_device *pdev)
        if (ret != 0)
                goto error_init_fb;
 
-       for (i = 0; i < pdata->mode_count; i++)
+       for (i = 0; i < pdata->mode_count; i++) {
                fb_add_videomode(&pdata->mode_list[i], &fb_info->modelist);
+               if (mode && strlen(mode) > 0 &&
+                       strcmp(mode, pdata->mode_list[i].name) == 0) {
+                       modelist = list_first_entry(&fb_info->modelist,
+                                               struct fb_modelist, list);
+               }
+       }
+       if (modelist == NULL)
+               modelist = list_first_entry(&fb_info->modelist,
+                                       struct fb_modelist, list);
+
+       if (modelist)
+               printk("Using video mode: '%s'\n", modelist->mode.name);
 
-       modelist = list_first_entry(&fb_info->modelist,
-                       struct fb_modelist, list);
        fb_videomode_to_var(&fb_info->var, &modelist->mode);
 
        /* init the color fields */
index f14943d55315695e36186a75c5db56f07407dd20..a9eca6812c97f9831fb37f009ac7ff573d70bc41 100644 (file)
@@ -25,7 +25,7 @@
 #define STMLCDIF_24BIT 3 /** pixel data bus to the display is of 24 bit width */
 
 #define FB_SYNC_DATA_ENABLE_HIGH_ACT   (1 << 6)
-#define FB_SYNC_DOTCLK_FAILING_ACT     (1 << 7) /* failing/negtive edge sampling */
+#define FB_SYNC_DOTCLK_FALLING_ACT     (1 << 7) /* falling/negative edge sampling */
 
 struct mxsfb_platform_data {
        struct fb_videomode *mode_list;
index c24de902f5f5c4fd4df0c8a81001f557d49fdfb8..e5499cf9b9f760bf43928ff6a881a13f6756cb48 100644 (file)
@@ -27,7 +27,7 @@ config SND_SOC_AC97_BUS
        bool
 
 config SND_SOC_DMAENGINE_PCM
-       bool
+       tristate
 
 # All the supported SoCs
 source "sound/soc/atmel/Kconfig"
index aa037b292f3dc05a9b6300c3cc4890988c0c2faf..8d4d92268bcad90c375e6795ec6c0515a06a6ed5 100644 (file)
@@ -229,6 +229,7 @@ int mxs_saif_put_mclk(unsigned int saif_id)
        saif->mclk_in_use = 0;
        return 0;
 }
+EXPORT_SYMBOL(mxs_saif_put_mclk);
 
 /*
  * Get MCLK and set clock rate, then enable it
@@ -282,6 +283,7 @@ int mxs_saif_get_mclk(unsigned int saif_id, unsigned int mclk,
 
        return 0;
 }
+EXPORT_SYMBOL(mxs_saif_get_mclk);
 
 /*
  * SAIF DAI format configuration.
index 5df529eda251abdda685de949747050cc3e066a0..bf21e25cc5bf41ea811c6000179caee272260d3b 100644 (file)
@@ -313,3 +313,4 @@ int snd_dmaengine_pcm_close(struct snd_pcm_substream *substream)
        return 0;
 }
 EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_close);
+MODULE_LICENSE("GPL");