diff options
author | Ash Charles <ash@gumstix.com> | 2010-10-18 11:05:33 +0000 |
---|---|---|
committer | Khem Raj <raj.khem@gmail.com> | 2010-10-20 18:30:22 -0700 |
commit | fb69129560edbf2fa298af0b74bcd0e6a838170e (patch) | |
tree | c8b93c5608dcde40147f82b30c58444a643b618c /recipes/linux/linux-gumstix-2.6.15 | |
parent | b72db8f97f6c060aeb2a33ffacefccd7a3df9889 (diff) | |
download | openembedded-fb69129560edbf2fa298af0b74bcd0e6a838170e.tar.gz |
linux-gumstix-2.6.15 & gumstix_2.6.5-gnalm1: removed outdated recipes
* removed two old recipes in the linux kernel with pre-2.6.20 kernel
as suggested by Marcin's RFC of 20 Oct 2010.
Signed-off-by: Ash Charles <ash@gumstix.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'recipes/linux/linux-gumstix-2.6.15')
44 files changed, 0 insertions, 7553 deletions
diff --git a/recipes/linux/linux-gumstix-2.6.15/add_input_randomness_export.patch b/recipes/linux/linux-gumstix-2.6.15/add_input_randomness_export.patch deleted file mode 100644 index 8829a0cea7..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/add_input_randomness_export.patch +++ /dev/null @@ -1,13 +0,0 @@ -Oddly, drivers/input/input.c seems to reference a symbol which is apparently in another module but not exported. -Index: linux-2.6.15gum/drivers/char/random.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/char/random.c -+++ linux-2.6.15gum/drivers/char/random.c -@@ -646,6 +646,7 @@ extern void add_input_randomness(unsigne - add_timer_randomness(&input_timer_state, - (type << 4) ^ code ^ (code >> 4) ^ value); - } -+EXPORT_SYMBOL(add_input_randomness); - - void add_interrupt_randomness(int irq) - { diff --git a/recipes/linux/linux-gumstix-2.6.15/arch-config.patch b/recipes/linux/linux-gumstix-2.6.15/arch-config.patch deleted file mode 100644 index 411a117953..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/arch-config.patch +++ /dev/null @@ -1,55 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/mach-pxa/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-pxa/Kconfig -+++ linux-2.6.15gum/arch/arm/mach-pxa/Kconfig -@@ -5,6 +5,10 @@ menu "Intel PXA2xx Implementations" - choice - prompt "Select target board" - -+config ARCH_GUMSTIX -+ bool "Gumstix Platform" -+ depends on ARCH_PXA -+ - config ARCH_LUBBOCK - bool "Intel DBPXA250 Development Platform" - select PXA25x -@@ -94,6 +98,27 @@ config MACH_TOSA - bool "Enable Sharp SL-6000x (Tosa) Support" - depends PXA_SHARPSL_25x - -+choice -+ depends on ARCH_GUMSTIX -+ prompt "Gumstix Platform Version" -+ default ARCH_GUMSTIX_F -+ -+config ARCH_GUMSTIX_ORIG -+ bool "Original Gumstix" -+ select PXA25x -+ help -+ The original gumstix platform, including the gs-200x and gs-400x and the waysmall -+ systems using these boards. -+ -+config ARCH_GUMSTIX_F -+ bool "Gumstix-F" -+ select PXA25x -+ help -+ The updated Gumstix boards with 60-pin connector, including gs-200f, gs-400f and the -+ waysmall systems using these boards, including ws-200ax and ws-400ax. -+ -+endchoice -+ - config PXA25x - bool - help -Index: linux-2.6.15gum/arch/arm/mach-pxa/Makefile -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-pxa/Makefile -+++ linux-2.6.15gum/arch/arm/mach-pxa/Makefile -@@ -8,6 +8,7 @@ obj-$(CONFIG_PXA25x) += pxa25x.o - obj-$(CONFIG_PXA27x) += pxa27x.o - - # Specific board support -+obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o - obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o - obj-$(CONFIG_MACH_MAINSTONE) += mainstone.o - obj-$(CONFIG_ARCH_PXA_IDP) += idp.o diff --git a/recipes/linux/linux-gumstix-2.6.15/audio.patch b/recipes/linux/linux-gumstix-2.6.15/audio.patch deleted file mode 100644 index d565b70582..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/audio.patch +++ /dev/null @@ -1,454 +0,0 @@ -Index: linux-2.6.15gum/sound/oss/ac97_codec.c -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/ac97_codec.c -+++ linux-2.6.15gum/sound/oss/ac97_codec.c -@@ -59,6 +59,9 @@ - - #define CODEC_ID_BUFSZ 14 - -+static int ucb1400_read_mixer(struct ac97_codec *codec, int oss_channel); -+static void ucb1400_write_mixer(struct ac97_codec *codec, int oss_channel, -+ unsigned int left, unsigned int right); - static int ac97_read_mixer(struct ac97_codec *codec, int oss_channel); - static void ac97_write_mixer(struct ac97_codec *codec, int oss_channel, - unsigned int left, unsigned int right); -@@ -85,6 +88,7 @@ static int cmedia_init(struct ac97_codec - static int cmedia_digital_control(struct ac97_codec *codec, int slots, int rate, int mode); - static int generic_digital_control(struct ac97_codec *codec, int slots, int rate, int mode); - static int ucb1400_init(struct ac97_codec *codec); -+static int ucb1400_control(struct ac97_codec *codec, int on); - - - /* -@@ -120,7 +124,7 @@ static struct ac97_ops crystal_digital_o - static struct ac97_ops ad1886_ops = { ad1886_init, eapd_control, NULL }; - static struct ac97_ops cmedia_ops = { NULL, eapd_control, NULL}; - static struct ac97_ops cmedia_digital_ops = { cmedia_init, eapd_control, cmedia_digital_control}; --static struct ac97_ops ucb1400_ops = { ucb1400_init, eapd_control, NULL }; -+static struct ac97_ops ucb1400_ops = { ucb1400_init, ucb1400_control, NULL }; - - /* sorted by vendor/device id */ - static const struct { -@@ -309,6 +313,143 @@ static LIST_HEAD(codecs); - static LIST_HEAD(codec_drivers); - static DECLARE_MUTEX(codec_sem); - -+// Values of UCB1400 register addresses -+#define AC97_UCB1400_FCR1 (0x6a) -+#define AC97_UCB1400_FCR2 (0x6c) -+// Masks for bits of interest in those registers -+#define AC97_UCB1400_BASS_BOOST_MASK (0xf << 11) -+#define AC97_UCB1400_TREB_BOOST_MASK (0x3 << 9) -+#define AC97_UCB1400_BOOST_MODE_MASK (0x3 << 7) -+// Calculate the boost mode from the register by extracting the bits, then shifting it down -+// Mode 0 == flat, 1 == minimum, 2 == minimum, 3 == maximum -+#define AC97_UCB1400_BOOST_MODE(x) (((x) & AC97_UCB1400_BOOST_MODE_MASK) >> 7) -+// Caculate the treble boost -+#define AC97_UCB1400_TREB_BOOST(x) (((x) & AC97_UCB1400_TREB_BOOST_MASK) >> 9) -+// Calculate the bass boost -+#define AC97_UCB1400_BASS_BOOST(x) (((x) & AC97_UCB1400_BASS_BOOST_MASK) >> 11) -+ -+// Use a conversion table to translate from the register values to dB values -+#define AC97_UCB1400_BASS_LOOKUP(x,l) ((l)[AC97_UCB1400_BASS_BOOST(x) | (AC97_UCB1400_BOOST_MODE(x) << 4)]) -+#define AC97_UCB1400_TREB_LOOKUP(x,l) ((l)[AC97_UCB1400_TREB_BOOST(x) | (AC97_UCB1400_BOOST_MODE(x) << 4)]) -+ -+// This lookup table is indexed by a 6 bit number: -+// Two high bits are the boost mode from teh register -+// Four low bits are from the BASS or TREB boost value in the register -+// The lookup value is the dB boost calculated from the UCB1400 spec sheet -+// The lookup values will be calculated and populated during ucb1400_init() -+static const u8 ac97_ucb1400_boost_lookup[] = { -+ [0] = 0, [1] = 0, [2] = 0, [3] = 0, -+ [4] = 0, [5] = 0, [6] = 0, [7] = 0, // flat 00 -+ [8] = 0, [9] = 0, [10] = 0, [11] = 0, -+ [12] = 0, [13] = 0, [14] = 0, [15] = 0, -+ -+ [16] = 0, [17] = 2, [18] = 4, [19] = 6, -+ [20] = 8, [21] = 10, [22] = 12, [23] = 14, // min 01 -+ [24] = 16, [25] = 18, [26] = 18, [27] = 18, -+ [28] = 18, [29] = 18, [30] = 18, [31] = 18, -+ -+ [32] = 0, [33] = 2, [34] = 4, [35] = 6, -+ [36] = 8, [37] = 10, [38] = 12, [39] = 14, // min 10 -+ [40] = 16, [41] = 18, [42] = 18, [43] = 18, -+ [44] = 18, [45] = 18, [46] = 18, [47] = 18, -+ -+ [48] = 0, [49] = 2, [50] = 4, [51] = 6, -+ [52] = 8, [53] = 10, [54] = 12, [55] = 14, // max 11 -+ [56] = 16, [57] = 18, [58] = 20, [59] = 22, -+ [60] = 24, [61] = 24, [62] = 24, [63] = 24 -+}; -+ -+static int ucb1400_read_mixer(struct ac97_codec *codec, int oss_channel) -+{ -+ u16 val; -+ -+ switch(oss_channel) -+ { -+ -+ case SOUND_MIXER_BASS: -+ // Convert from the 24-dB max BASS boost level to a %age -+ val = codec->codec_read(codec, AC97_UCB1400_FCR1); // Read the register -+ return (AC97_UCB1400_BASS_LOOKUP(val, ac97_ucb1400_boost_lookup)*100)/24; -+ -+ case SOUND_MIXER_TREBLE: -+ // Convert from the 6-dB max TREB boost level to a %age -+ val = codec->codec_read(codec, AC97_UCB1400_FCR1); // Read the register -+ return (AC97_UCB1400_TREB_LOOKUP(val, ac97_ucb1400_boost_lookup)*100)/6; -+ -+ case SOUND_MIXER_MIC: -+ val = codec->codec_read(codec, AC97_MIC_VOL); -+ return (val & AC97_MICBOOST ? 100 : 0); -+ -+ default: -+ return ac97_read_mixer(codec, oss_channel); -+ } -+} -+ -+#ifndef MAX -+#define MAX(a,b) (((a)>(b)) ? (a) : (b)) -+#endif -+ -+static void ucb1400_write_mixer(struct ac97_codec *codec, int oss_channel, -+ unsigned int left, unsigned int right) -+{ -+ u16 old_val,new_val; -+ u8 treb,bass; -+ -+ switch(oss_channel) -+ { -+ case SOUND_MIXER_BASS: -+ case SOUND_MIXER_TREBLE: -+ old_val = codec->codec_read(codec, AC97_UCB1400_FCR1); // Read the register -+ -+ // Determine which one changed, set old one to old value (or 0 if old mode was flat) -+ bass = (oss_channel==SOUND_MIXER_BASS) ? -+ (left*24)/100 : // Convert from %age to 0-24dB scale for bass -+ AC97_UCB1400_BASS_LOOKUP(old_val, ac97_ucb1400_boost_lookup); -+ treb = (oss_channel==SOUND_MIXER_TREBLE) ? -+ (left*6)/100 : // convert from %age to 0-6dB scale for bass -+ AC97_UCB1400_TREB_LOOKUP(old_val, ac97_ucb1400_boost_lookup); -+ -+ // Now convert both treble and bass to values for the register. -+ // If both are 0, then use mode flat -+ // If either is non-zero, then use mode min if bass <=18 -+ // Otherwise, use mode max -+ new_val = old_val & ~(AC97_UCB1400_BASS_BOOST_MASK | // First clear the bits -+ AC97_UCB1400_TREB_BOOST_MASK | // which is same as flat mode -+ AC97_UCB1400_BOOST_MODE_MASK); // with both boosts at 0 -+ if(bass > 18) -+ { -+ new_val |= (3 << 7); // Set boost mode to 0b11 which is "max" -+ } -+ else if(bass > 0 || treb > 0) -+ { -+ new_val |= (1 << 7); // Set boost mode to 0b01 which is "min" -+ } -+ else -+ { -+ // Set boost mode to 0b00 which is "flat" -+ } -+ -+ if(bass || treb) -+ { -+ // The value to stick in the register the boost in dB divided by 2 -+ // Dividing by 2 is the same as shifting right by 1 -+ // We fix overflows by anding with the mask -+ new_val |= ((bass >> 1) << 11) & AC97_UCB1400_BASS_BOOST_MASK; -+ new_val |= ((treb >> 1) << 9) & AC97_UCB1400_TREB_BOOST_MASK; -+ } -+ -+ // Ok, now poke the value back to the codec -+ codec->codec_write(codec, AC97_UCB1400_FCR1, new_val); -+ break; -+ -+ case SOUND_MIXER_MIC: -+ codec->codec_write(codec, AC97_MIC_VOL, (left >= 50 ? AC97_MICBOOST : 0)); -+ break; -+ -+ default: ac97_write_mixer(codec, oss_channel, left, right); -+ } -+} -+ - /* reads the given OSS mixer from the ac97 the caller must have insured that the ac97 knows - about that given mixer, and should be holding a spinlock for the card */ - static int ac97_read_mixer(struct ac97_codec *codec, int oss_channel) -@@ -526,6 +667,7 @@ static int ac97_recmask_io(struct ac97_c - #endif - - codec->codec_write(codec, AC97_RECORD_SELECT, val); -+ val = codec->codec_read(codec, AC97_RECORD_SELECT); - - return 0; - }; -@@ -634,6 +776,8 @@ int ac97_read_proc (char *page, char **s - { - int len = 0, cap, extid, val, id1, id2; - struct ac97_codec *codec; -+ u8 ac97_register_query_list[] = {0x02,0x0e,0x1a,0x1c,0x26,0x2a,0x2c,0x32,0x6a,0x6c,0x00}; -+ size_t i=0; - int is_ac97_20 = 0; - - if ((codec = data) == NULL) -@@ -702,6 +846,13 @@ int ac97_read_proc (char *page, char **s - codec->codec_read(codec, AC97_PCM_FRONT_DAC_RATE)); - } - -+ do -+ { -+ len += sprintf(page+len, "Reg. 0x%02x : 0x%04x\n", -+ ac97_register_query_list[i], -+ codec->codec_read(codec, ac97_register_query_list[i])); -+ i++; -+ } while(ac97_register_query_list[i]); - return len; - } - -@@ -1180,7 +1331,25 @@ static int ad1886_init(struct ac97_codec - } - - -+static int ucb1400_control(struct ac97_codec *codec, int on) -+{ -+ if(on) -+ { -+ codec->codec_write(codec, AC97_POWER_CONTROL, 0x0000); // turn everything on - -+ // Now we wait for everything to settle -+ udelay(100); -+ } -+ else -+ { -+ codec->codec_write(codec, AC97_POWER_CONTROL, -+ (1 << 11) | // PR3: Audio Vref power-down -+ (1 << 9) | // PR1: Audio DAC and output path power-down -+ (1 << 8) // PR0: Audio ADC and input path power-down -+ ); -+ } -+ return 0; -+} - - /* - * This is basically standard AC97. It should work as a default for -@@ -1336,10 +1505,55 @@ static int pt101_init(struct ac97_codec - - static int ucb1400_init(struct ac97_codec *codec) - { -- codec->codec_write(codec,AC97_EXTENDED_STATUS,1); -- //codec->codec_write(codec, 0x6a, 0x1ff7); -- codec->codec_write(codec, 0x6a, 0x0050); -- codec->codec_write(codec, 0x6c, 0x0030); -+ codec->supported_mixers = SOUND_MASK_VOLUME | // Specify what UCB1400 supports -+ SOUND_MASK_BASS | -+ SOUND_MASK_TREBLE | -+ SOUND_MASK_MIC | -+ SOUND_MASK_IGAIN; -+ -+ codec->stereo_mixers = SOUND_MASK_VOLUME | // Specify what UCB1400 supports -+ SOUND_MASK_LINE | -+ SOUND_MASK_IGAIN; -+ -+ codec->record_sources = SOUND_MASK_MIC | // Specify what UCB1400 supports -+ SOUND_MASK_LINE; -+ -+ codec->read_mixer = ucb1400_read_mixer; // The UCB1400 bass and treble implementations -+ codec->write_mixer = ucb1400_write_mixer; // need special code -+ -+ codec->codec_write(codec,AC97_EXTENDED_STATUS, 1); // Ensure that VRA is on -+ -+ ucb1400_control(codec, 1); // Turn on DAC/ADC paths first to prevent click -+ -+ codec->codec_write(codec, AC97_UCB1400_FCR1, -+ (0 << 11) | // 0 base boost -+ (0 << 9) | // 0 treble boost -+ (0 << 7) | // Mode = flat -+ (1 << 6) | // Headphones enable -+ (0 << 5) | // De-emphasis disabled -+ (1 << 4) | // DC filter enabled -+ (1 << 3) | // Hi-pass filter enabled -+ (0 << 2) | // disable interrupt signalling via GPIO_INT -+ (1 << 0) // clear ADC overflow status if set -+ ); -+ -+ codec->codec_write(codec, AC97_UCB1400_FCR2, -+ (0 << 15) | // must be 0 -+ (0 << 13) | // must be 0 -+ (1 << 12) | // ADC filter enabled -+ (0 << 10) | // must be 0 -+ (0 << 4) | // Smart low power mode on neither Codec nor PLL -+ (0 << 0) // must be 0 -+ ); -+ -+ codec->codec_write(codec, AC97_RECORD_SELECT, 0); // default source is MIC -+ -+ codec->codec_write(codec, AC97_MIC_VOL, (1 << 6)); // 20dB MIC boost -+ -+ codec->codec_write(codec, AC97_RECORD_GAIN, 0); // no master record gain -+ -+ codec->codec_write(codec, AC97_GENERAL_PURPOSE, 0); // no ADC to DAC loopback -+ - return 0; - } - -@@ -1368,30 +1582,9 @@ unsigned int ac97_set_dac_rate(struct ac - - if(rate != codec->codec_read(codec, AC97_PCM_FRONT_DAC_RATE)) - { -- /* Mute several registers */ -- mast_vol = codec->codec_read(codec, AC97_MASTER_VOL_STEREO); -- mono_vol = codec->codec_read(codec, AC97_MASTER_VOL_MONO); -- phone_vol = codec->codec_read(codec, AC97_HEADPHONE_VOL); -- pcm_vol = codec->codec_read(codec, AC97_PCMOUT_VOL); -- codec->codec_write(codec, AC97_MASTER_VOL_STEREO, mute_vol); -- codec->codec_write(codec, AC97_MASTER_VOL_MONO, mute_vol); -- codec->codec_write(codec, AC97_HEADPHONE_VOL, mute_vol); -- codec->codec_write(codec, AC97_PCMOUT_VOL, mute_vol); -- -- /* Power down the DAC */ -- dacp=codec->codec_read(codec, AC97_POWER_CONTROL); -- codec->codec_write(codec, AC97_POWER_CONTROL, dacp|0x0200); - /* Load the rate and read the effective rate */ - codec->codec_write(codec, AC97_PCM_FRONT_DAC_RATE, rate); - new_rate=codec->codec_read(codec, AC97_PCM_FRONT_DAC_RATE); -- /* Power it back up */ -- codec->codec_write(codec, AC97_POWER_CONTROL, dacp); -- -- /* Restore volumes */ -- codec->codec_write(codec, AC97_MASTER_VOL_STEREO, mast_vol); -- codec->codec_write(codec, AC97_MASTER_VOL_MONO, mono_vol); -- codec->codec_write(codec, AC97_HEADPHONE_VOL, phone_vol); -- codec->codec_write(codec, AC97_PCMOUT_VOL, pcm_vol); - } - return new_rate; - } -@@ -1414,14 +1607,9 @@ unsigned int ac97_set_adc_rate(struct ac - - if(rate != codec->codec_read(codec, AC97_PCM_LR_ADC_RATE)) - { -- /* Power down the ADC */ -- dacp=codec->codec_read(codec, AC97_POWER_CONTROL); -- codec->codec_write(codec, AC97_POWER_CONTROL, dacp|0x0100); - /* Load the rate and read the effective rate */ - codec->codec_write(codec, AC97_PCM_LR_ADC_RATE, rate); - new_rate=codec->codec_read(codec, AC97_PCM_LR_ADC_RATE); -- /* Power it back up */ -- codec->codec_write(codec, AC97_POWER_CONTROL, dacp); - } - return new_rate; - } -Index: linux-2.6.15gum/sound/oss/pxa-ac97.c -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/pxa-ac97.c -+++ linux-2.6.15gum/sound/oss/pxa-ac97.c -@@ -21,6 +21,7 @@ - #include <linux/completion.h> - #include <linux/delay.h> - #include <linux/poll.h> -+#include <linux/proc_fs.h> - #include <linux/sound.h> - #include <linux/soundcard.h> - #include <linux/ac97_codec.h> -@@ -55,10 +56,10 @@ static u16 pxa_ac97_read(struct ac97_cod - if (GSR & GSR_RDCS) { - GSR = GSR_RDCS; //write a 1 to clear - printk(KERN_CRIT "%s: read codec register timeout.\n", __FUNCTION__); -- } -+ } - - init_completion(&CAR_completion); -- val = *reg_addr; //valid data now but we've just started another cycle... -+ val = *reg_addr; //valid data now but we've just started another cycle... - wait_for_completion(&CAR_completion); - - } else { -@@ -116,7 +117,7 @@ int pxa_ac97_get(struct ac97_codec **cod - if (ret) - return ret; - -- CKEN |= CKEN2_AC97; -+ pxa_set_cken(CKEN2_AC97,1); - - pxa_gpio_mode(GPIO31_SYNC_AC97_MD); - pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD); -@@ -134,7 +135,7 @@ int pxa_ac97_get(struct ac97_codec **cod - if (ret != 1) { - free_irq(IRQ_AC97, NULL); - GCR = GCR_ACLINK_OFF; -- CKEN &= ~CKEN2_AC97; -+ pxa_set_cken(CKEN2_AC97,0); - return ret; - } - } -@@ -151,7 +152,7 @@ void pxa_ac97_put(void) - pxa_ac97_refcount--; - if (!pxa_ac97_refcount) { - GCR = GCR_ACLINK_OFF; -- CKEN &= ~CKEN2_AC97; -+ pxa_set_cken(CKEN2_AC97,0); - free_irq(IRQ_AC97, NULL); - } - up(&pxa_ac97_mutex); -@@ -179,7 +180,7 @@ static audio_stream_t ac97_audio_in; - */ - static void update_audio_in (void) - { --#if 1 -+#if 0 - long val; - - /* Use the value stuffed by ac97_recmask_io() -@@ -335,6 +336,13 @@ static int __init pxa_ac97_init(void) - - update_audio_in (); - -+ if(!proc_mkdir("driver/ucb1400",NULL)) return -EIO; -+ if(!create_proc_read_entry("driver/ucb1400/ac97",0,NULL,ac97_read_proc,&pxa_ac97_codec)) -+ { -+ remove_proc_entry("driver/ucb1400",NULL); -+ return -EIO; -+ } -+ - ac97_audio_state.dev_dsp = register_sound_dsp(&ac97_audio_fops, -1); - pxa_ac97_codec.dev_mixer = register_sound_mixer(&mixer_fops, -1); - -@@ -345,6 +353,8 @@ static void __exit pxa_ac97_exit(void) - { - unregister_sound_dsp(ac97_audio_state.dev_dsp); - unregister_sound_mixer(pxa_ac97_codec.dev_mixer); -+ remove_proc_entry("driver/ucb1400/ac97",NULL); -+ remove_proc_entry("driver/ucb1400",NULL); - pxa_ac97_put(); - } - -Index: linux-2.6.15gum/sound/oss/pxa-audio.c -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/pxa-audio.c -+++ linux-2.6.15gum/sound/oss/pxa-audio.c -@@ -293,8 +293,6 @@ static int audio_write(struct file *file - audio_stream_t *s = state->output_stream; - int chunksize, ret = 0; - -- if (ppos != &file->f_pos) -- return -ESPIPE; - if (s->mapped) - return -ENXIO; - if (!s->buffers && audio_setup_buf(s)) -@@ -365,8 +363,6 @@ static int audio_read(struct file *file, - audio_stream_t *s = state->input_stream; - int chunksize, ret = 0; - -- if (ppos != &file->f_pos) -- return -ESPIPE; - if (s->mapped) - return -ENXIO; - if (!s->buffers && audio_setup_buf(s)) -@@ -684,6 +680,9 @@ static int audio_ioctl( struct inode *in - file->f_flags |= O_NONBLOCK; - return 0; - -+ case SNDCTL_DSP_GETODELAY: -+ printk("%s: GETODELAY not implemented!\n",__FILE__); -+ - case SNDCTL_DSP_RESET: - if (file->f_mode & FMODE_WRITE) - audio_clear_buf(os); diff --git a/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-ac97.patch b/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-ac97.patch deleted file mode 100644 index efb7e73e15..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-ac97.patch +++ /dev/null @@ -1,1415 +0,0 @@ -Index: linux-2.6.15gum/include/linux/ac97_codec.h -=================================================================== ---- linux-2.6.15gum.orig/include/linux/ac97_codec.h -+++ linux-2.6.15gum/include/linux/ac97_codec.h -@@ -259,7 +259,8 @@ struct ac97_codec { - int type; - u32 model; - -- int modem:1; -+ unsigned modem:1; -+ unsigned power:1; - - struct ac97_ops *codec_ops; - -Index: linux-2.6.15gum/sound/oss/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/Kconfig -+++ linux-2.6.15gum/sound/oss/Kconfig -@@ -178,6 +178,14 @@ config SOUND_MAESTRO3 - Say Y or M if you have a sound system driven by ESS's Maestro 3 - PCI sound chip. - -+config SOUND_PXA_AC97 -+ tristate "PXA AC97 support" -+ depends on SOUND_PRIME!=n && ARCH_PXA && SOUND -+ -+config SOUND_PXA_AUDIO -+ tristate "PXA audio support" -+ depends on SOUND_PXA_AC97 -+ - config SOUND_ICH - tristate "Intel ICH (i8xx) audio support" - depends on SOUND_PRIME && PCI -@@ -1125,6 +1133,9 @@ config SOUND_AD1980 - tristate "AD1980 front/back switch plugin" - depends on SOUND_PRIME && OBSOLETE_OSS_DRIVER - -+config SOUND_WM97XX -+ tristate "WM97XX sound/touchscreen codec" -+ - config SOUND_SH_DAC_AUDIO - tristate "SuperH DAC audio support" - depends on SOUND_PRIME && CPU_SH3 -Index: linux-2.6.15gum/sound/oss/Makefile -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/Makefile -+++ linux-2.6.15gum/sound/oss/Makefile -@@ -44,6 +44,8 @@ obj-$(CONFIG_SOUND_VIA82CXXX) += via82cx - ifeq ($(CONFIG_MIDI_VIA82CXXX),y) - obj-$(CONFIG_SOUND_VIA82CXXX) += sound.o uart401.o - endif -+obj-$(CONFIG_SOUND_PXA_AC97) += pxa-ac97.o ac97_codec.o -+obj-$(CONFIG_SOUND_PXA_AUDIO) += pxa-audio.o - obj-$(CONFIG_SOUND_YMFPCI) += ymfpci.o ac97_codec.o - ifeq ($(CONFIG_SOUND_YMFPCI_LEGACY),y) - obj-$(CONFIG_SOUND_YMFPCI) += opl3.o uart401.o -Index: linux-2.6.15gum/sound/oss/ac97_codec.c -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/ac97_codec.c -+++ linux-2.6.15gum/sound/oss/ac97_codec.c -@@ -84,6 +84,7 @@ static int crystal_digital_control(struc - static int cmedia_init(struct ac97_codec * codec); - static int cmedia_digital_control(struct ac97_codec *codec, int slots, int rate, int mode); - static int generic_digital_control(struct ac97_codec *codec, int slots, int rate, int mode); -+static int ucb1400_init(struct ac97_codec *codec); - - - /* -@@ -119,6 +120,7 @@ static struct ac97_ops crystal_digital_o - static struct ac97_ops ad1886_ops = { ad1886_init, eapd_control, NULL }; - static struct ac97_ops cmedia_ops = { NULL, eapd_control, NULL}; - static struct ac97_ops cmedia_digital_ops = { cmedia_init, eapd_control, cmedia_digital_control}; -+static struct ac97_ops ucb1400_ops = { ucb1400_init, eapd_control, NULL }; - - /* sorted by vendor/device id */ - static const struct { -@@ -164,6 +166,7 @@ static const struct { - {0x4e534331, "National Semiconductor LM4549", &null_ops}, - {0x53494c22, "Silicon Laboratory Si3036", &null_ops}, - {0x53494c23, "Silicon Laboratory Si3038", &null_ops}, -+ {0x50534304, "Philips UCB1400", &ucb1400_ops}, - {0x545200FF, "TriTech TR?????", &tritech_m_ops}, - {0x54524102, "TriTech TR28022", &null_ops}, - {0x54524103, "TriTech TR28023", &null_ops}, -@@ -461,6 +464,17 @@ static void ac97_write_mixer(struct ac97 - val = codec->codec_read(codec, mh->offset); - printk(" -> 0x%04x\n", val); - #endif -+ -+ if (val & AC97_MUTE) -+ val = 0; -+ else -+ val = 1; -+ if ((oss_channel == SOUND_MIXER_VOLUME) && -+ (codec->codec_ops->amplifier) && -+ (codec->power != val)) { -+ codec->power = val; -+ codec->codec_ops->amplifier (codec, codec->power); -+ } - } - - /* a thin wrapper for write_mixer */ -@@ -1092,6 +1106,13 @@ static int wolfson_init05(struct ac97_co - { - /* set front mixer volume */ - codec->codec_write(codec, AC97_WM97XX_FMIXER_VOL, 0x0808); -+ /*codec->codec_write(codec, 0x78, 0xc004); -+ while(1){ -+ codec->codec_write(codec, 0x76, 0xa020); -+ printk("%08x ", codec->codec_read(codec, 0x76)); -+ printk("%08x ", codec->codec_read(codec, 0x78)); -+ printk("%08x\n", codec->codec_read(codec, 0x7A)); -+ }*/ - return 0; - } - -@@ -1313,6 +1334,14 @@ static int pt101_init(struct ac97_codec - } - #endif - -+static int ucb1400_init(struct ac97_codec *codec) -+{ -+ codec->codec_write(codec,AC97_EXTENDED_STATUS,1); -+ //codec->codec_write(codec, 0x6a, 0x1ff7); -+ codec->codec_write(codec, 0x6a, 0x0050); -+ codec->codec_write(codec, 0x6c, 0x0030); -+ return 0; -+} - - EXPORT_SYMBOL(ac97_read_proc); - EXPORT_SYMBOL(ac97_probe_codec); -Index: linux-2.6.15gum/sound/oss/pxa-ac97.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/sound/oss/pxa-ac97.c -@@ -0,0 +1,357 @@ -+/* -+ * linux/drivers/sound/pxa-ac97.c -- AC97 interface for the Cotula chip -+ * -+ * Author: Nicolas Pitre -+ * Created: Aug 15, 2001 -+ * Copyright: MontaVista Software Inc. -+ * -+ * Forward ported to 2.6 by Ian Molton 15/09/2003 -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <linux/init.h> -+#include <linux/module.h> -+#include <linux/kernel.h> -+#include <linux/slab.h> -+#include <linux/pci.h> -+#include <linux/interrupt.h> -+#include <linux/completion.h> -+#include <linux/delay.h> -+#include <linux/poll.h> -+#include <linux/sound.h> -+#include <linux/soundcard.h> -+#include <linux/ac97_codec.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/irq.h> -+#include <asm/uaccess.h> -+#include <asm/semaphore.h> -+#include <asm/dma.h> -+ -+#include "pxa-audio.h" -+ -+static struct completion CAR_completion; -+static int waitingForMask; -+static DECLARE_MUTEX(CAR_mutex); -+ -+static u16 pxa_ac97_read(struct ac97_codec *codec, u8 reg) -+{ -+ u16 val = -1; -+ -+ down(&CAR_mutex); -+ if (!(CAR & CAR_CAIP)) { -+ volatile u32 *reg_addr = (u32 *)&PAC_REG_BASE + (reg >> 1); -+ -+ waitingForMask=GSR_SDONE; -+ -+ init_completion(&CAR_completion); -+ (void)*reg_addr; //start read access across the ac97 link -+ wait_for_completion(&CAR_completion); -+ -+ if (GSR & GSR_RDCS) { -+ GSR = GSR_RDCS; //write a 1 to clear -+ printk(KERN_CRIT "%s: read codec register timeout.\n", __FUNCTION__); -+ } -+ -+ init_completion(&CAR_completion); -+ val = *reg_addr; //valid data now but we've just started another cycle... -+ wait_for_completion(&CAR_completion); -+ -+ } else { -+ printk(KERN_CRIT"%s: CAR_CAIP already set\n", __FUNCTION__); -+ } -+ up(&CAR_mutex); -+ //printk("%s(0x%02x) = 0x%04x\n", __FUNCTION__, reg, val); -+ return val; -+} -+ -+static void pxa_ac97_write(struct ac97_codec *codec, u8 reg, u16 val) -+{ -+ down(&CAR_mutex); -+ if (!(CAR & CAR_CAIP)) { -+ volatile u32 *reg_addr = (u32 *)&PAC_REG_BASE + (reg >> 1); -+ -+ waitingForMask=GSR_CDONE; -+ init_completion(&CAR_completion); -+ *reg_addr = val; -+ wait_for_completion(&CAR_completion); -+ } else { -+ printk(KERN_CRIT "%s: CAR_CAIP already set\n", __FUNCTION__); -+ } -+ up(&CAR_mutex); -+ //printk("%s(0x%02x, 0x%04x)\n", __FUNCTION__, reg, val); -+} -+ -+static irqreturn_t pxa_ac97_irq(int irq, void *dev_id, struct pt_regs *regs) -+{ -+ int gsr = GSR; -+ GSR = gsr & (GSR_SDONE|GSR_CDONE); //write a 1 to clear -+ if (gsr & waitingForMask) -+ complete(&CAR_completion); -+ -+ return IRQ_HANDLED; -+} -+ -+static struct ac97_codec pxa_ac97_codec = { -+ codec_read: pxa_ac97_read, -+ codec_write: pxa_ac97_write, -+}; -+ -+static DECLARE_MUTEX(pxa_ac97_mutex); -+static int pxa_ac97_refcount; -+ -+int pxa_ac97_get(struct ac97_codec **codec) -+{ -+ int ret; -+ -+ *codec = NULL; -+ down(&pxa_ac97_mutex); -+ -+ if (!pxa_ac97_refcount) { -+ ret = request_irq(IRQ_AC97, pxa_ac97_irq, 0, "AC97", NULL); -+ if (ret) -+ return ret; -+ -+ CKEN |= CKEN2_AC97; -+ -+ pxa_gpio_mode(GPIO31_SYNC_AC97_MD); -+ pxa_gpio_mode(GPIO30_SDATA_OUT_AC97_MD); -+ pxa_gpio_mode(GPIO28_BITCLK_AC97_MD); -+ pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD); -+ -+ GCR = 0; -+ udelay(10); -+ GCR = GCR_COLD_RST|GCR_CDONE_IE|GCR_SDONE_IE; -+ while (!(GSR & GSR_PCR)) { -+ schedule(); -+ } -+ -+ ret = ac97_probe_codec(&pxa_ac97_codec); -+ if (ret != 1) { -+ free_irq(IRQ_AC97, NULL); -+ GCR = GCR_ACLINK_OFF; -+ CKEN &= ~CKEN2_AC97; -+ return ret; -+ } -+ } -+ -+ pxa_ac97_refcount++; -+ up(&pxa_ac97_mutex); -+ *codec = &pxa_ac97_codec; -+ return 0; -+} -+ -+void pxa_ac97_put(void) -+{ -+ down(&pxa_ac97_mutex); -+ pxa_ac97_refcount--; -+ if (!pxa_ac97_refcount) { -+ GCR = GCR_ACLINK_OFF; -+ CKEN &= ~CKEN2_AC97; -+ free_irq(IRQ_AC97, NULL); -+ } -+ up(&pxa_ac97_mutex); -+} -+ -+EXPORT_SYMBOL(pxa_ac97_get); -+EXPORT_SYMBOL(pxa_ac97_put); -+ -+ -+/* -+ * Audio Mixer stuff -+ */ -+ -+static audio_state_t ac97_audio_state; -+static audio_stream_t ac97_audio_in; -+ -+/* -+ * According to the PXA250 spec, mic-in should use different -+ * DRCMR and different AC97 FIFO. -+ * Unfortunately current UCB1400 versions (up to ver 2A) don't -+ * produce slot 6 for the audio input frame, therefore the PXA -+ * AC97 mic-in FIFO is always starved. -+ * But since UCB1400 is not the only audio CODEC out there, -+ * this is still enabled by default. -+ */ -+static void update_audio_in (void) -+{ -+#if 1 -+ long val; -+ -+ /* Use the value stuffed by ac97_recmask_io() -+ * into recording select register -+ */ -+ val = pxa_ac97_codec.codec_read(&pxa_ac97_codec, AC97_RECORD_SELECT); -+ pxa_audio_clear_buf(&ac97_audio_in); -+ *ac97_audio_in.drcmr = 0; -+ if (val == 0) { -+ ac97_audio_in.dcmd = DCMD_RXMCDR; -+ ac97_audio_in.drcmr = &DRCMRRXMCDR; -+ ac97_audio_in.dev_addr = __PREG(MCDR); -+ } else { -+ ac97_audio_in.dcmd = DCMD_RXPCDR; -+ ac97_audio_in.drcmr = &DRCMRRXPCDR; -+ ac97_audio_in.dev_addr = __PREG(PCDR); -+ } -+ if (ac97_audio_state.rd_ref) -+ *ac97_audio_in.drcmr = -+ ac97_audio_in.dma_ch | DRCMR_MAPVLD; -+#endif -+} -+ -+static int mixer_ioctl( struct inode *inode, struct file *file, -+ unsigned int cmd, unsigned long arg) -+{ -+ int ret; -+ -+ ret = pxa_ac97_codec.mixer_ioctl(&pxa_ac97_codec, cmd, arg); -+ if (ret) -+ return ret; -+ -+ /* We must snoop for some commands to provide our own extra processing */ -+ switch (cmd) { -+ case SOUND_MIXER_WRITE_RECSRC: -+ update_audio_in (); -+ break; -+ } -+ return 0; -+} -+ -+static struct file_operations mixer_fops = { -+ ioctl: mixer_ioctl, -+ llseek: no_llseek, -+ owner: THIS_MODULE -+}; -+ -+/* -+ * AC97 codec ioctls -+ */ -+ -+static int codec_adc_rate = 48000; -+static int codec_dac_rate = 48000; -+ -+static int ac97_ioctl(struct inode *inode, struct file *file, -+ unsigned int cmd, unsigned long arg) -+{ -+ int ret; -+ long val = 0; -+ -+ switch(cmd) { -+ case SNDCTL_DSP_STEREO: -+ ret = get_user(val, (int *) arg); -+ if (ret) -+ return ret; -+ /* FIXME: do we support mono? */ -+ ret = (val == 0) ? -EINVAL : 1; -+ return put_user(ret, (int *) arg); -+ -+ case SNDCTL_DSP_CHANNELS: -+ case SOUND_PCM_READ_CHANNELS: -+ /* FIXME: do we support mono? */ -+ return put_user(2, (long *) arg); -+ -+ case SNDCTL_DSP_SPEED: -+ ret = get_user(val, (long *) arg); -+ if (ret) -+ return ret; -+ if (file->f_mode & FMODE_READ) -+ codec_adc_rate = ac97_set_adc_rate(&pxa_ac97_codec, val); -+ if (file->f_mode & FMODE_WRITE) -+ codec_dac_rate = ac97_set_dac_rate(&pxa_ac97_codec, val); -+ /* fall through */ -+ case SOUND_PCM_READ_RATE: -+ if (file->f_mode & FMODE_READ) -+ val = codec_adc_rate; -+ if (file->f_mode & FMODE_WRITE) -+ val = codec_dac_rate; -+ return put_user(val, (long *) arg); -+ -+ case SNDCTL_DSP_SETFMT: -+ case SNDCTL_DSP_GETFMTS: -+ /* FIXME: can we do other fmts? */ -+ return put_user(AFMT_S16_LE, (long *) arg); -+ -+ default: -+ /* Maybe this is meant for the mixer (As per OSS Docs) */ -+ return mixer_ioctl(inode, file, cmd, arg); -+ } -+ return 0; -+} -+ -+ -+/* -+ * Audio stuff -+ */ -+ -+static audio_stream_t ac97_audio_out = { -+ name: "AC97 audio out", -+ dcmd: DCMD_TXPCDR, -+ drcmr: &DRCMRTXPCDR, -+ dev_addr: __PREG(PCDR), -+}; -+ -+static audio_stream_t ac97_audio_in = { -+ name: "AC97 audio in", -+ dcmd: DCMD_RXPCDR, -+ drcmr: &DRCMRRXPCDR, -+ dev_addr: __PREG(PCDR), -+}; -+ -+static audio_state_t ac97_audio_state = { -+ output_stream: &ac97_audio_out, -+ input_stream: &ac97_audio_in, -+ client_ioctl: ac97_ioctl, -+ sem: __MUTEX_INITIALIZER(ac97_audio_state.sem), -+}; -+ -+static int ac97_audio_open(struct inode *inode, struct file *file) -+{ -+ return pxa_audio_attach(inode, file, &ac97_audio_state); -+} -+ -+/* -+ * Missing fields of this structure will be patched with the call -+ * to pxa_audio_attach(). -+ */ -+ -+static struct file_operations ac97_audio_fops = { -+ open: ac97_audio_open, -+ owner: THIS_MODULE -+}; -+ -+ -+static int __init pxa_ac97_init(void) -+{ -+ int ret; -+ struct ac97_codec *dummy; -+ -+ ret = pxa_ac97_get(&dummy); -+ if (ret) -+ return ret; -+ -+ update_audio_in (); -+ -+ ac97_audio_state.dev_dsp = register_sound_dsp(&ac97_audio_fops, -1); -+ pxa_ac97_codec.dev_mixer = register_sound_mixer(&mixer_fops, -1); -+ -+ return 0; -+} -+ -+static void __exit pxa_ac97_exit(void) -+{ -+ unregister_sound_dsp(ac97_audio_state.dev_dsp); -+ unregister_sound_mixer(pxa_ac97_codec.dev_mixer); -+ pxa_ac97_put(); -+} -+ -+ -+module_init(pxa_ac97_init); -+module_exit(pxa_ac97_exit); -+ -+MODULE_AUTHOR("Nicolas Pitre"); -+MODULE_DESCRIPTION("AC97 interface for the Cotula chip"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.15gum/sound/oss/pxa-audio.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/sound/oss/pxa-audio.c -@@ -0,0 +1,858 @@ -+/* -+ * linux/drivers/sound/pxa-audio.c -- audio interface for the Cotula chip -+ * -+ * Author: Nicolas Pitre -+ * Created: Aug 15, 2001 -+ * Copyright: MontaVista Software Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <linux/init.h> -+#include <linux/module.h> -+#include <linux/kernel.h> -+#include <linux/slab.h> -+#include <linux/pci.h> -+#include <linux/poll.h> -+#include <linux/sound.h> -+#include <linux/soundcard.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/irq.h> -+#include <asm/uaccess.h> -+#include <asm/semaphore.h> -+#include <asm/dma.h> -+ -+#include "pxa-audio.h" -+ -+ -+#define AUDIO_NBFRAGS_DEFAULT 8 -+#define AUDIO_FRAGSIZE_DEFAULT 8192 -+ -+#define MAX_DMA_SIZE 4096 -+#define DMA_DESC_SIZE sizeof(pxa_dma_desc) -+ -+ -+/* -+ * This function frees all buffers -+ */ -+#define audio_clear_buf pxa_audio_clear_buf -+ -+void pxa_audio_clear_buf(audio_stream_t * s) -+{ -+ DECLARE_WAITQUEUE(wait, current); -+ int frag; -+ -+ if (!s->buffers) -+ return; -+ -+ /* Ensure DMA isn't running */ -+ set_current_state(TASK_UNINTERRUPTIBLE); -+ add_wait_queue(&s->stop_wq, &wait); -+ DCSR(s->dma_ch) = DCSR_STOPIRQEN; -+ schedule(); -+ remove_wait_queue(&s->stop_wq, &wait); -+ -+ /* free DMA buffers */ -+ for (frag = 0; frag < s->nbfrags; frag++) { -+ audio_buf_t *b = &s->buffers[frag]; -+ if (!b->master) -+ continue; -+ dma_free_writecombine(NULL, b->master, b->data, b->dma_desc->dsadr); -+ } -+ -+ /* free descriptor ring */ -+ if (s->buffers->dma_desc) -+ dma_free_writecombine(NULL, s->nbfrags * s->descs_per_frag * DMA_DESC_SIZE, -+ s->buffers->dma_desc, s->dma_desc_phys); -+ -+ /* free buffer structure array */ -+ kfree(s->buffers); -+ s->buffers = NULL; -+} -+ -+/* -+ * This function allocates the DMA descriptor array and buffer data space -+ * according to the current number of fragments and fragment size. -+ */ -+static int audio_setup_buf(audio_stream_t * s) -+{ -+ pxa_dma_desc *dma_desc; -+ dma_addr_t dma_desc_phys; -+ int nb_desc, frag, i, buf_size = 0; -+ char *dma_buf = NULL; -+ dma_addr_t dma_buf_phys = 0; -+ -+ if (s->buffers) -+ return -EBUSY; -+ -+ /* Our buffer structure array */ -+ s->buffers = kmalloc(sizeof(audio_buf_t) * s->nbfrags, GFP_KERNEL); -+ if (!s->buffers) -+ goto err; -+ memzero(s->buffers, sizeof(audio_buf_t) * s->nbfrags); -+ -+ /* -+ * Our DMA descriptor array: -+ * for Each fragment we have one checkpoint descriptor plus one -+ * descriptor per MAX_DMA_SIZE byte data blocks. -+ */ -+ nb_desc = (1 + (s->fragsize + MAX_DMA_SIZE - 1)/MAX_DMA_SIZE) * s->nbfrags; -+ dma_desc = dma_alloc_writecombine(NULL, nb_desc * DMA_DESC_SIZE, -+ &dma_desc_phys, GFP_KERNEL); -+ -+ if (!dma_desc) -+ goto err; -+ s->descs_per_frag = nb_desc / s->nbfrags; -+ s->buffers->dma_desc = dma_desc; -+ s->dma_desc_phys = dma_desc_phys; -+ for (i = 0; i < nb_desc - 1; i++) -+ dma_desc[i].ddadr = dma_desc_phys + (i + 1) * DMA_DESC_SIZE; -+ dma_desc[i].ddadr = dma_desc_phys; -+ -+ /* Our actual DMA buffers */ -+ for (frag = 0; frag < s->nbfrags; frag++) { -+ audio_buf_t *b = &s->buffers[frag]; -+ -+ /* -+ * Let's allocate non-cached memory for DMA buffers. -+ * We try to allocate all memory at once. -+ * If this fails (a common reason is memory fragmentation), -+ * then we'll try allocating smaller buffers. -+ */ -+ if (!buf_size) { -+ buf_size = (s->nbfrags - frag) * s->fragsize; -+ do { -+ dma_buf = dma_alloc_writecombine(NULL, buf_size, -+ &dma_buf_phys, -+ GFP_KERNEL); -+ if (!dma_buf) -+ buf_size -= s->fragsize; -+ } while (!dma_buf && buf_size); -+ if (!dma_buf) -+ goto err; -+ b->master = buf_size; -+ memzero(dma_buf, buf_size); -+ } -+ -+ /* -+ * Set up our checkpoint descriptor. Since the count -+ * is always zero, we'll abuse the dsadr and dtadr fields -+ * just in case this one is picked up by the hardware -+ * while processing SOUND_DSP_GETPTR. -+ */ -+ dma_desc->dsadr = dma_buf_phys; -+ dma_desc->dtadr = dma_buf_phys; -+ dma_desc->dcmd = DCMD_ENDIRQEN; -+ if (s->output && !s->mapped) -+ dma_desc->ddadr |= DDADR_STOP; -+ b->dma_desc = dma_desc++; -+ -+ /* set up the actual data descriptors */ -+ for (i = 0; (i * MAX_DMA_SIZE) < s->fragsize; i++) { -+ dma_desc[i].dsadr = (s->output) ? -+ (dma_buf_phys + i*MAX_DMA_SIZE) : s->dev_addr; -+ dma_desc[i].dtadr = (s->output) ? -+ s->dev_addr : (dma_buf_phys + i*MAX_DMA_SIZE); -+ dma_desc[i].dcmd = s->dcmd | -+ ((s->fragsize < MAX_DMA_SIZE) ? -+ s->fragsize : MAX_DMA_SIZE); -+ } -+ dma_desc += i; -+ -+ /* handle buffer pointers */ -+ b->data = dma_buf; -+ dma_buf += s->fragsize; -+ dma_buf_phys += s->fragsize; -+ buf_size -= s->fragsize; -+ } -+ -+ s->usr_frag = s->dma_frag = 0; -+ s->bytecount = 0; -+ s->fragcount = 0; -+ sema_init(&s->sem, (s->output) ? s->nbfrags : 0); -+ return 0; -+ -+err: -+ printk("pxa-audio: unable to allocate audio memory\n "); -+ audio_clear_buf(s); -+ return -ENOMEM; -+} -+ -+/* -+ * Our DMA interrupt handler -+ */ -+static void audio_dma_irq(int ch, void *dev_id, struct pt_regs *regs) -+{ -+ audio_stream_t *s = dev_id; -+ u_int dcsr; -+ -+ dcsr = DCSR(ch); -+ DCSR(ch) = dcsr & ~DCSR_STOPIRQEN; -+ -+ if (!s->buffers) { -+ printk("AC97 DMA: wow... received IRQ for channel %d but no buffer exists\n", ch); -+ return; -+ } -+ -+ if (dcsr & DCSR_BUSERR) -+ printk("AC97 DMA: bus error interrupt on channel %d\n", ch); -+ -+ if (dcsr & DCSR_ENDINTR) { -+ u_long cur_dma_desc; -+ u_int cur_dma_frag; -+ -+ /* -+ * Find out which DMA desc is current. Note that DDADR -+ * points to the next desc, not the current one. -+ */ -+ cur_dma_desc = DDADR(ch) - s->dma_desc_phys - DMA_DESC_SIZE; -+ -+ /* -+ * Let the compiler nicely optimize constant divisors into -+ * multiplications for the common cases which is much faster. -+ * Common cases: x = 1 + (1 << y) for y = [0..3] -+ */ -+ switch (s->descs_per_frag) { -+ case 2: cur_dma_frag = cur_dma_desc / (2*DMA_DESC_SIZE); break; -+ case 3: cur_dma_frag = cur_dma_desc / (3*DMA_DESC_SIZE); break; -+ case 5: cur_dma_frag = cur_dma_desc / (5*DMA_DESC_SIZE); break; -+ case 9: cur_dma_frag = cur_dma_desc / (9*DMA_DESC_SIZE); break; -+ default: cur_dma_frag = -+ cur_dma_desc / (s->descs_per_frag * DMA_DESC_SIZE); -+ } -+ -+ /* Account for possible wrap back of cur_dma_desc above */ -+ if (cur_dma_frag >= s->nbfrags) -+ cur_dma_frag = s->nbfrags - 1; -+ -+ while (s->dma_frag != cur_dma_frag) { -+ if (!s->mapped) { -+ /* -+ * This fragment is done - set the checkpoint -+ * descriptor to STOP until it is gets -+ * processed by the read or write function. -+ */ -+ s->buffers[s->dma_frag].dma_desc->ddadr |= DDADR_STOP; -+ up(&s->sem); -+ } -+ if (++s->dma_frag >= s->nbfrags) -+ s->dma_frag = 0; -+ -+ /* Accounting */ -+ s->bytecount += s->fragsize; -+ s->fragcount++; -+ } -+ -+ /* ... and for polling processes */ -+ wake_up(&s->frag_wq); -+ } -+ -+ if ((dcsr & DCSR_STOPIRQEN) && (dcsr & DCSR_STOPSTATE)) -+ wake_up(&s->stop_wq); -+} -+ -+/* -+ * Validate and sets up buffer fragments, etc. -+ */ -+static int audio_set_fragments(audio_stream_t *s, int val) -+{ -+ if (s->mapped || DCSR(s->dma_ch) & DCSR_RUN) -+ return -EBUSY; -+ if (s->buffers) -+ audio_clear_buf(s); -+ s->nbfrags = (val >> 16) & 0x7FFF; -+ val &= 0xffff; -+ if (val < 5) -+ val = 5; -+ if (val > 15) -+ val = 15; -+ s->fragsize = 1 << val; -+ if (s->nbfrags < 2) -+ s->nbfrags = 2; -+ if (s->nbfrags * s->fragsize > 256 * 1024) -+ s->nbfrags = 256 * 1024 / s->fragsize; -+ if (audio_setup_buf(s)) -+ return -ENOMEM; -+ return val|(s->nbfrags << 16); -+} -+ -+ -+/* -+ * The fops functions -+ */ -+ -+static int audio_write(struct file *file, const char *buffer, -+ size_t count, loff_t * ppos) -+{ -+ const char *buffer0 = buffer; -+ audio_state_t *state = (audio_state_t *)file->private_data; -+ audio_stream_t *s = state->output_stream; -+ int chunksize, ret = 0; -+ -+ if (ppos != &file->f_pos) -+ return -ESPIPE; -+ if (s->mapped) -+ return -ENXIO; -+ if (!s->buffers && audio_setup_buf(s)) -+ return -ENOMEM; -+ -+ while (count > 0) { -+ audio_buf_t *b = &s->buffers[s->usr_frag]; -+ -+ /* Grab a fragment */ -+ if (file->f_flags & O_NONBLOCK) { -+ ret = -EAGAIN; -+ if (down_trylock(&s->sem)) -+ break; -+ } else { -+ ret = -ERESTARTSYS; -+ if (down_interruptible(&s->sem)) -+ break; -+ } -+ -+ /* Feed the current buffer */ -+ chunksize = s->fragsize - b->offset; -+ if (chunksize > count) -+ chunksize = count; -+ if (copy_from_user(b->data + b->offset, buffer, chunksize)) { -+ up(&s->sem); -+ return -EFAULT; -+ } -+ -+ b->offset += chunksize; -+ buffer += chunksize; -+ count -= chunksize; -+ if (b->offset < s->fragsize) { -+ ret = 0; -+ up(&s->sem); -+ break; -+ } -+ -+ /* -+ * Activate DMA on current buffer. -+ * We unlock this fragment's checkpoint descriptor and -+ * kick DMA if it is idle. Using checkpoint descriptors -+ * allows for control operations without the need for -+ * stopping the DMA channel if it is already running. -+ */ -+ b->offset = 0; -+ b->dma_desc->ddadr &= ~DDADR_STOP; -+ if (DCSR(s->dma_ch) & DCSR_STOPSTATE) { -+ DDADR(s->dma_ch) = b->dma_desc->ddadr; -+ DCSR(s->dma_ch) = DCSR_RUN; -+ } -+ -+ /* move the index to the next fragment */ -+ if (++s->usr_frag >= s->nbfrags) -+ s->usr_frag = 0; -+ } -+ -+ if ((buffer - buffer0)) -+ ret = buffer - buffer0; -+ return ret; -+} -+ -+ -+static int audio_read(struct file *file, char *buffer, -+ size_t count, loff_t * ppos) -+{ -+ char *buffer0 = buffer; -+ audio_state_t *state = file->private_data; -+ audio_stream_t *s = state->input_stream; -+ int chunksize, ret = 0; -+ -+ if (ppos != &file->f_pos) -+ return -ESPIPE; -+ if (s->mapped) -+ return -ENXIO; -+ if (!s->buffers && audio_setup_buf(s)) -+ return -ENOMEM; -+ -+ while (count > 0) { -+ audio_buf_t *b = &s->buffers[s->usr_frag]; -+ -+ /* prime DMA */ -+ if (DCSR(s->dma_ch) & DCSR_STOPSTATE) { -+ DDADR(s->dma_ch) = -+ s->buffers[s->dma_frag].dma_desc->ddadr; -+ DCSR(s->dma_ch) = DCSR_RUN; -+ } -+ -+ /* Wait for a buffer to become full */ -+ if (file->f_flags & O_NONBLOCK) { -+ ret = -EAGAIN; -+ if (down_trylock(&s->sem)) -+ break; -+ } else { -+ ret = -ERESTARTSYS; -+ if (down_interruptible(&s->sem)) -+ break; -+ } -+ -+ /* Grab data from current buffer */ -+ chunksize = s->fragsize - b->offset; -+ if (chunksize > count) -+ chunksize = count; -+ if (copy_to_user(buffer, b->data + b->offset, chunksize)) { -+ up(&s->sem); -+ return -EFAULT; -+ } -+ b->offset += chunksize; -+ buffer += chunksize; -+ count -= chunksize; -+ if (b->offset < s->fragsize) { -+ ret = 0; -+ up(&s->sem); -+ break; -+ } -+ -+ /* -+ * Make this buffer available for DMA again. -+ * We unlock this fragment's checkpoint descriptor and -+ * kick DMA if it is idle. Using checkpoint descriptors -+ * allows for control operations without the need for -+ * stopping the DMA channel if it is already running. -+ */ -+ b->offset = 0; -+ b->dma_desc->ddadr &= ~DDADR_STOP; -+ -+ /* move the index to the next fragment */ -+ if (++s->usr_frag >= s->nbfrags) -+ s->usr_frag = 0; -+ } -+ -+ if ((buffer - buffer0)) -+ ret = buffer - buffer0; -+ return ret; -+} -+ -+ -+static int audio_sync(struct file *file) -+{ -+ audio_state_t *state = file->private_data; -+ audio_stream_t *s = state->output_stream; -+ audio_buf_t *b; -+ pxa_dma_desc *final_desc; -+ u_long dcmd_save = 0; -+ DECLARE_WAITQUEUE(wait, current); -+ -+ if (!(file->f_mode & FMODE_WRITE) || !s->buffers || s->mapped) -+ return 0; -+ -+ /* -+ * Send current buffer if it contains data. Be sure to send -+ * a full sample count. -+ */ -+ final_desc = NULL; -+ b = &s->buffers[s->usr_frag]; -+ if (b->offset &= ~3) { -+ final_desc = &b->dma_desc[1 + b->offset/MAX_DMA_SIZE]; -+ b->offset &= (MAX_DMA_SIZE-1); -+ dcmd_save = final_desc->dcmd; -+ final_desc->dcmd = b->offset | s->dcmd | DCMD_ENDIRQEN; -+ final_desc->ddadr |= DDADR_STOP; -+ b->offset = 0; -+ b->dma_desc->ddadr &= ~DDADR_STOP; -+ if (DCSR(s->dma_ch) & DCSR_STOPSTATE) { -+ DDADR(s->dma_ch) = b->dma_desc->ddadr; -+ DCSR(s->dma_ch) = DCSR_RUN; -+ } -+ } -+ -+ /* Wait for DMA to complete. */ -+ set_current_state(TASK_INTERRUPTIBLE); -+#if 0 -+ /* -+ * The STOPSTATE IRQ never seem to occur if DCSR_STOPIRQEN is set -+ * along wotj DCSR_RUN. Silicon bug? -+ */ -+ add_wait_queue(&s->stop_wq, &wait); -+ DCSR(s->dma_ch) |= DCSR_STOPIRQEN; -+ schedule(); -+#else -+ add_wait_queue(&s->frag_wq, &wait); -+ while ((DCSR(s->dma_ch) & DCSR_RUN) && !signal_pending(current)) { -+ schedule(); -+ set_current_state(TASK_INTERRUPTIBLE); -+ } -+#endif -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&s->frag_wq, &wait); -+ -+ /* Restore the descriptor chain. */ -+ if (final_desc) { -+ final_desc->dcmd = dcmd_save; -+ final_desc->ddadr &= ~DDADR_STOP; -+ b->dma_desc->ddadr |= DDADR_STOP; -+ } -+ return 0; -+} -+ -+ -+static unsigned int audio_poll(struct file *file, -+ struct poll_table_struct *wait) -+{ -+ audio_state_t *state = file->private_data; -+ audio_stream_t *is = state->input_stream; -+ audio_stream_t *os = state->output_stream; -+ unsigned int mask = 0; -+ -+ if (file->f_mode & FMODE_READ) { -+ /* Start audio input if not already active */ -+ if (!is->buffers && audio_setup_buf(is)) -+ return -ENOMEM; -+ if (DCSR(is->dma_ch) & DCSR_STOPSTATE) { -+ DDADR(is->dma_ch) = -+ is->buffers[is->dma_frag].dma_desc->ddadr; -+ DCSR(is->dma_ch) = DCSR_RUN; -+ } -+ poll_wait(file, &is->frag_wq, wait); -+ } -+ -+ if (file->f_mode & FMODE_WRITE) { -+ if (!os->buffers && audio_setup_buf(os)) -+ return -ENOMEM; -+ poll_wait(file, &os->frag_wq, wait); -+ } -+ -+ if (file->f_mode & FMODE_READ) -+ if (( is->mapped && is->bytecount > 0) || -+ (!is->mapped && atomic_read(&is->sem.count) > 0)) -+ mask |= POLLIN | POLLRDNORM; -+ -+ if (file->f_mode & FMODE_WRITE) -+ if (( os->mapped && os->bytecount > 0) || -+ (!os->mapped && atomic_read(&os->sem.count) > 0)) -+ mask |= POLLOUT | POLLWRNORM; -+ -+ return mask; -+} -+ -+ -+static int audio_ioctl( struct inode *inode, struct file *file, -+ uint cmd, ulong arg) -+{ -+ audio_state_t *state = file->private_data; -+ audio_stream_t *os = state->output_stream; -+ audio_stream_t *is = state->input_stream; -+ long val; -+ -+ switch (cmd) { -+ case OSS_GETVERSION: -+ return put_user(SOUND_VERSION, (int *)arg); -+ -+ case SNDCTL_DSP_GETBLKSIZE: -+ if (file->f_mode & FMODE_WRITE) -+ return put_user(os->fragsize, (int *)arg); -+ else -+ return put_user(is->fragsize, (int *)arg); -+ -+ case SNDCTL_DSP_GETCAPS: -+ val = DSP_CAP_REALTIME|DSP_CAP_TRIGGER|DSP_CAP_MMAP; -+ if (is && os) -+ val |= DSP_CAP_DUPLEX; -+ return put_user(val, (int *)arg); -+ -+ case SNDCTL_DSP_SETFRAGMENT: -+ if (get_user(val, (long *) arg)) -+ return -EFAULT; -+ if (file->f_mode & FMODE_READ) { -+ int ret = audio_set_fragments(is, val); -+ if (ret < 0) -+ return ret; -+ ret = put_user(ret, (int *)arg); -+ if (ret) -+ return ret; -+ } -+ if (file->f_mode & FMODE_WRITE) { -+ int ret = audio_set_fragments(os, val); -+ if (ret < 0) -+ return ret; -+ ret = put_user(ret, (int *)arg); -+ if (ret) -+ return ret; -+ } -+ return 0; -+ -+ case SNDCTL_DSP_SYNC: -+ return audio_sync(file); -+ -+ case SNDCTL_DSP_SETDUPLEX: -+ return 0; -+ -+ case SNDCTL_DSP_POST: -+ return 0; -+ -+ case SNDCTL_DSP_GETTRIGGER: -+ val = 0; -+ if (file->f_mode & FMODE_READ && DCSR(is->dma_ch) & DCSR_RUN) -+ val |= PCM_ENABLE_INPUT; -+ if (file->f_mode & FMODE_WRITE && DCSR(os->dma_ch) & DCSR_RUN) -+ val |= PCM_ENABLE_OUTPUT; -+ return put_user(val, (int *)arg); -+ -+ case SNDCTL_DSP_SETTRIGGER: -+ if (get_user(val, (int *)arg)) -+ return -EFAULT; -+ if (file->f_mode & FMODE_READ) { -+ if (val & PCM_ENABLE_INPUT) { -+ if (!is->buffers && audio_setup_buf(is)) -+ return -ENOMEM; -+ if (!(DCSR(is->dma_ch) & DCSR_RUN)) { -+ audio_buf_t *b = &is->buffers[is->dma_frag]; -+ DDADR(is->dma_ch) = b->dma_desc->ddadr; -+ DCSR(is->dma_ch) = DCSR_RUN; -+ } -+ } else { -+ DCSR(is->dma_ch) = 0; -+ } -+ } -+ if (file->f_mode & FMODE_WRITE) { -+ if (val & PCM_ENABLE_OUTPUT) { -+ if (!os->buffers && audio_setup_buf(os)) -+ return -ENOMEM; -+ if (!(DCSR(os->dma_ch) & DCSR_RUN)) { -+ audio_buf_t *b = &os->buffers[os->dma_frag]; -+ DDADR(os->dma_ch) = b->dma_desc->ddadr; -+ DCSR(os->dma_ch) = DCSR_RUN; -+ } -+ } else { -+ DCSR(os->dma_ch) = 0; -+ } -+ } -+ return 0; -+ -+ case SNDCTL_DSP_GETOSPACE: -+ case SNDCTL_DSP_GETISPACE: -+ { -+ audio_buf_info inf = { 0, }; -+ audio_stream_t *s = (cmd == SNDCTL_DSP_GETOSPACE) ? os : is; -+ -+ if ((s == is && !(file->f_mode & FMODE_READ)) || -+ (s == os && !(file->f_mode & FMODE_WRITE))) -+ return -EINVAL; -+ if (!s->buffers && audio_setup_buf(s)) -+ return -ENOMEM; -+ inf.bytes = atomic_read(&s->sem.count) * s->fragsize; -+ inf.bytes -= s->buffers[s->usr_frag].offset; -+ inf.fragments = inf.bytes / s->fragsize; -+ inf.fragsize = s->fragsize; -+ inf.fragstotal = s->nbfrags; -+ return copy_to_user((void *)arg, &inf, sizeof(inf)); -+ } -+ -+ case SNDCTL_DSP_GETOPTR: -+ case SNDCTL_DSP_GETIPTR: -+ { -+ count_info inf = { 0, }; -+ audio_stream_t *s = (cmd == SNDCTL_DSP_GETOPTR) ? os : is; -+ dma_addr_t ptr; -+ int bytecount, offset; -+ unsigned long flags; -+ -+ if ((s == is && !(file->f_mode & FMODE_READ)) || -+ (s == os && !(file->f_mode & FMODE_WRITE))) -+ return -EINVAL; -+ local_irq_save(flags); -+ if (DCSR(s->dma_ch) & DCSR_RUN) { -+ audio_buf_t *b; -+ ptr = (s->output) ? DSADR(s->dma_ch) : DTADR(s->dma_ch); -+ b = &s->buffers[s->dma_frag]; -+ offset = ptr - b->dma_desc->dsadr; -+ if (offset >= s->fragsize) -+ offset = s->fragsize - 4; -+ } else { -+ offset = 0; -+ } -+ inf.ptr = s->dma_frag * s->fragsize + offset; -+ bytecount = s->bytecount + offset; -+ s->bytecount = -offset; -+ inf.blocks = s->fragcount; -+ s->fragcount = 0; -+ local_irq_restore(flags); -+ if (bytecount < 0) -+ bytecount = 0; -+ inf.bytes = bytecount; -+ return copy_to_user((void *)arg, &inf, sizeof(inf)); -+ } -+ -+ case SNDCTL_DSP_NONBLOCK: -+ file->f_flags |= O_NONBLOCK; -+ return 0; -+ -+ case SNDCTL_DSP_RESET: -+ if (file->f_mode & FMODE_WRITE) -+ audio_clear_buf(os); -+ if (file->f_mode & FMODE_READ) -+ audio_clear_buf(is); -+ return 0; -+ -+ default: -+ return state->client_ioctl ? -+ state->client_ioctl(inode, file, cmd, arg) : -EINVAL; -+ } -+ -+ return 0; -+} -+ -+ -+static int audio_mmap(struct file *file, struct vm_area_struct *vma) -+{ -+ audio_state_t *state = file->private_data; -+ audio_stream_t *s; -+ unsigned long size, vma_addr; -+ int i, ret; -+ -+ if (vma->vm_pgoff != 0) -+ return -EINVAL; -+ -+ if (vma->vm_flags & VM_WRITE) { -+ if (!state->wr_ref) -+ return -EINVAL;; -+ s = state->output_stream; -+ } else if (vma->vm_flags & VM_READ) { -+ if (!state->rd_ref) -+ return -EINVAL; -+ s = state->input_stream; -+ } else return -EINVAL; -+ -+ if (s->mapped) -+ return -EINVAL; -+ size = vma->vm_end - vma->vm_start; -+ if (size != s->fragsize * s->nbfrags) -+ return -EINVAL; -+ if (!s->buffers && audio_setup_buf(s)) -+ return -ENOMEM; -+ vma_addr = vma->vm_start; -+ for (i = 0; i < s->nbfrags; i++) { -+ audio_buf_t *buf = &s->buffers[i]; -+ if (!buf->master) -+ continue; -+ ret = remap_page_range(vma, vma->vm_start, buf->dma_desc->dsadr, -+ buf->master, vma->vm_page_prot); -+ if (ret) -+ return ret; -+ vma_addr += buf->master; -+ } -+ for (i = 0; i < s->nbfrags; i++) -+ s->buffers[i].dma_desc->ddadr &= ~DDADR_STOP; -+ s->mapped = 1; -+ return 0; -+} -+ -+ -+static int audio_release(struct inode *inode, struct file *file) -+{ -+ audio_state_t *state = file->private_data; -+ -+ down(&state->sem); -+ -+ if (file->f_mode & FMODE_READ) { -+ audio_clear_buf(state->input_stream); -+ *state->input_stream->drcmr = 0; -+ pxa_free_dma(state->input_stream->dma_ch); -+ state->rd_ref = 0; -+ } -+ -+ if (file->f_mode & FMODE_WRITE) { -+ audio_sync(file); -+ audio_clear_buf(state->output_stream); -+ *state->output_stream->drcmr = 0; -+ pxa_free_dma(state->output_stream->dma_ch); -+ state->wr_ref = 0; -+ } -+ -+ up(&state->sem); -+ return 0; -+} -+ -+ -+int pxa_audio_attach(struct inode *inode, struct file *file, -+ audio_state_t *state) -+{ -+ audio_stream_t *is = state->input_stream; -+ audio_stream_t *os = state->output_stream; -+ int err; -+ -+ down(&state->sem); -+ -+ /* access control */ -+ err = -ENODEV; -+ if ((file->f_mode & FMODE_WRITE) && !os) -+ goto out; -+ if ((file->f_mode & FMODE_READ) && !is) -+ goto out; -+ err = -EBUSY; -+ if ((file->f_mode & FMODE_WRITE) && state->wr_ref) -+ goto out; -+ if ((file->f_mode & FMODE_READ) && state->rd_ref) -+ goto out; -+ -+ /* request DMA channels */ -+ if (file->f_mode & FMODE_WRITE) { -+ err = pxa_request_dma(os->name, DMA_PRIO_LOW, -+ audio_dma_irq, os); -+ if (err < 0) -+ goto out; -+ os->dma_ch = err; -+ } -+ if (file->f_mode & FMODE_READ) { -+ err = pxa_request_dma(is->name, DMA_PRIO_LOW, -+ audio_dma_irq, is); -+ if (err < 0) { -+ if (file->f_mode & FMODE_WRITE) { -+ *os->drcmr = 0; -+ pxa_free_dma(os->dma_ch); -+ } -+ goto out; -+ } -+ is->dma_ch = err; -+ } -+ -+ file->private_data = state; -+ file->f_op->release = audio_release; -+ file->f_op->write = audio_write; -+ file->f_op->read = audio_read; -+ file->f_op->mmap = audio_mmap; -+ file->f_op->poll = audio_poll; -+ file->f_op->ioctl = audio_ioctl; -+ file->f_op->llseek = no_llseek; -+ -+ if ((file->f_mode & FMODE_WRITE)) { -+ state->wr_ref = 1; -+ os->fragsize = AUDIO_FRAGSIZE_DEFAULT; -+ os->nbfrags = AUDIO_NBFRAGS_DEFAULT; -+ os->output = 1; -+ os->mapped = 0; -+ init_waitqueue_head(&os->frag_wq); -+ init_waitqueue_head(&os->stop_wq); -+ *os->drcmr = os->dma_ch | DRCMR_MAPVLD; -+ } -+ if (file->f_mode & FMODE_READ) { -+ state->rd_ref = 1; -+ is->fragsize = AUDIO_FRAGSIZE_DEFAULT; -+ is->nbfrags = AUDIO_NBFRAGS_DEFAULT; -+ is->output = 0; -+ is->mapped = 0; -+ init_waitqueue_head(&is->frag_wq); -+ init_waitqueue_head(&is->stop_wq); -+ *is->drcmr = is->dma_ch | DRCMR_MAPVLD; -+ } -+ -+ err = 0; -+ -+out: -+ up(&state->sem); -+ return err; -+} -+ -+EXPORT_SYMBOL(pxa_audio_attach); -+EXPORT_SYMBOL(pxa_audio_clear_buf); -+ -+MODULE_AUTHOR("Nicolas Pitre, MontaVista Software Inc."); -+MODULE_DESCRIPTION("audio interface for the Cotula chip"); -+MODULE_LICENSE("GPL"); -Index: linux-2.6.15gum/sound/oss/pxa-audio.h -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/sound/oss/pxa-audio.h -@@ -0,0 +1,54 @@ -+/* -+ * linux/drivers/sound/pxa-audio.h -- audio interface for the Cotula chip -+ * -+ * Author: Nicolas Pitre -+ * Created: Aug 15, 2001 -+ * Copyright: MontaVista Software Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+typedef struct { -+ int offset; /* current buffer position */ -+ char *data; /* actual buffer */ -+ pxa_dma_desc *dma_desc; /* pointer to the starting desc */ -+ int master; /* owner for buffer allocation, contain size whn true */ -+} audio_buf_t; -+ -+typedef struct { -+ char *name; /* stream identifier */ -+ audio_buf_t *buffers; /* pointer to audio buffer array */ -+ u_int usr_frag; /* user fragment index */ -+ u_int dma_frag; /* DMA fragment index */ -+ u_int fragsize; /* fragment size */ -+ u_int nbfrags; /* number of fragments */ -+ u_int dma_ch; /* DMA channel number */ -+ dma_addr_t dma_desc_phys; /* phys addr of descriptor ring */ -+ u_int descs_per_frag; /* nbr descriptors per fragment */ -+ int bytecount; /* nbr of processed bytes */ -+ int fragcount; /* nbr of fragment transitions */ -+ struct semaphore sem; /* account for fragment usage */ -+ wait_queue_head_t frag_wq; /* for poll(), etc. */ -+ wait_queue_head_t stop_wq; /* for users of DCSR_STOPIRQEN */ -+ u_long dcmd; /* DMA descriptor dcmd field */ -+ volatile u32 *drcmr; /* the DMA request channel to use */ -+ u_long dev_addr; /* device physical address for DMA */ -+ int mapped:1; /* mmap()'ed buffers */ -+ int output:1; /* 0 for input, 1 for output */ -+} audio_stream_t; -+ -+typedef struct { -+ audio_stream_t *output_stream; -+ audio_stream_t *input_stream; -+ int dev_dsp; /* audio device handle */ -+ int rd_ref:1; /* open reference for recording */ -+ int wr_ref:1; /* open reference for playback */ -+ int (*client_ioctl)(struct inode *, struct file *, uint, ulong); -+ struct semaphore sem; /* prevent races in attach/release */ -+} audio_state_t; -+ -+extern int pxa_audio_attach(struct inode *inode, struct file *file, -+ audio_state_t *state); -+extern void pxa_audio_clear_buf(audio_stream_t *s); diff --git a/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-cpu.patch b/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-cpu.patch deleted file mode 100644 index e989c72b70..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-cpu.patch +++ /dev/null @@ -1,117 +0,0 @@ -Status: WORKS -PXA CPU enhancements - -from patch 1667: -- 64K PTEs -from hh.org-cvs: -- support in pxa_gpio_mode for active low - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - -Index: linux-2.6.15gum/arch/arm/mm/proc-xscale.S -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mm/proc-xscale.S -+++ linux-2.6.15gum/arch/arm/mm/proc-xscale.S -@@ -444,11 +444,62 @@ ENTRY(cpu_xscale_set_pte) - movne r2, #0 @ no -> fault - - str r2, [r0] @ hardware version -+ -+ @ We try to map 64K page entries when possible. -+ @ We do that for kernel space only since the usage pattern from -+ @ the setting of VM area is quite simple. User space is not worth -+ @ the implied complexity because of ever randomly changing PTEs -+ @ (page aging, swapout, etc) requiring constant coherency checks. -+ @ Since PTEs are usually set in increasing order, we test the -+ @ possibility for a large page only when given the last PTE of a -+ @ 64K boundary. -+ tsteq r1, #L_PTE_USER -+ andeq r1, r0, #(15 << 2) -+ teqeq r1, #(15 << 2) -+ beq 1f -+ - mov ip, #0 - mcr p15, 0, r0, c7, c10, 1 @ Clean D cache line - mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer - mov pc, lr - -+ @ See if we have 16 identical PTEs but with consecutive base addresses -+1: bic r3, r2, #0x0000f000 -+ mov r1, #0x0000f000 -+2: eor r2, r2, r3 -+ teq r2, r1 -+ bne 4f -+ subs r1, r1, #0x00001000 -+ ldr r2, [r0, #-4]! -+ bne 2b -+ eors r2, r2, r3 -+ bne 4f -+ -+ @ Now create our LARGE PTE from the current EXT one. -+ bic r3, r3, #PTE_TYPE_MASK -+ orr r3, r3, #PTE_TYPE_LARGE -+ and r2, r3, #0x30 @ EXT_AP --> LARGE_AP0 -+ orr r2, r2, r2, lsl #2 @ add LARGE_AP1 -+ orr r2, r2, r2, lsl #4 @ add LARGE_AP3 + LARGE_AP2 -+ and r1, r3, #0x3c0 @ EXT_TEX -+ bic r3, r3, #0x3c0 -+ orr r2, r2, r1, lsl #(12 - 6) @ --> LARGE_TEX -+ orr r2, r2, r3 @ add remaining bits -+ -+ @ then put it in the pagetable -+ mov r3, r2 -+3: strd r2, [r0], #8 -+ tst r0, #(15 << 2) -+ bne 3b -+ -+ @ Then sync the 2 corresponding cache lines -+ sub r0, r0, #(16 << 2) -+ mcr p15, 0, r0, c7, c10, 1 @ Clean D cache line -+4: orr r0, r0, #(15 << 2) -+ mcr p15, 0, r0, c7, c10, 1 @ Clean D cache line -+ mov ip, #0 -+ mcr p15, 0, ip, c7, c10, 4 @ Drain Write (& Fill) Buffer -+ mov pc, lr - - .ltorg - -Index: linux-2.6.15gum/include/asm-arm/arch-pxa/pxa-regs.h -=================================================================== ---- linux-2.6.15gum.orig/include/asm-arm/arch-pxa/pxa-regs.h -+++ linux-2.6.15gum/include/asm-arm/arch-pxa/pxa-regs.h -@@ -1348,6 +1348,7 @@ - #define GPIO_ALT_FN_2_OUT 0x280 - #define GPIO_ALT_FN_3_IN 0x300 - #define GPIO_ALT_FN_3_OUT 0x380 -+#define GPIO_ACTIVE_LOW 0x1000 - #define GPIO_MD_MASK_NR 0x07f - #define GPIO_MD_MASK_DIR 0x080 - #define GPIO_MD_MASK_FN 0x300 -@@ -1598,6 +1599,25 @@ - #define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ - #define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ - -+#define PWER_GPIO(Nb) (1 << Nb) /* GPIO [0..15] wake-up enable */ -+#define PWER_GPIO0 PWER_GPIO (0) /* GPIO [0] wake-up enable */ -+#define PWER_GPIO1 PWER_GPIO (1) /* GPIO [1] wake-up enable */ -+#define PWER_GPIO2 PWER_GPIO (2) /* GPIO [2] wake-up enable */ -+#define PWER_GPIO3 PWER_GPIO (3) /* GPIO [3] wake-up enable */ -+#define PWER_GPIO4 PWER_GPIO (4) /* GPIO [4] wake-up enable */ -+#define PWER_GPIO5 PWER_GPIO (5) /* GPIO [5] wake-up enable */ -+#define PWER_GPIO6 PWER_GPIO (6) /* GPIO [6] wake-up enable */ -+#define PWER_GPIO7 PWER_GPIO (7) /* GPIO [7] wake-up enable */ -+#define PWER_GPIO8 PWER_GPIO (8) /* GPIO [8] wake-up enable */ -+#define PWER_GPIO9 PWER_GPIO (9) /* GPIO [9] wake-up enable */ -+#define PWER_GPIO10 PWER_GPIO (10) /* GPIO [10] wake-up enable */ -+#define PWER_GPIO11 PWER_GPIO (11) /* GPIO [11] wake-up enable */ -+#define PWER_GPIO12 PWER_GPIO (12) /* GPIO [12] wake-up enable */ -+#define PWER_GPIO13 PWER_GPIO (13) /* GPIO [13] wake-up enable */ -+#define PWER_GPIO14 PWER_GPIO (14) /* GPIO [14] wake-up enable */ -+#define PWER_GPIO15 PWER_GPIO (15) /* GPIO [15] wake-up enable */ -+#define PWER_RTC 0x80000000 /* RTC alarm wake-up enable */ -+ - - /* - * SSP Serial Port Registers diff --git a/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-cpufreq.patch b/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-cpufreq.patch deleted file mode 100644 index be522995f6..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bkpxa-pxa-cpufreq.patch +++ /dev/null @@ -1,403 +0,0 @@ -Status: WORKS -PXA CPU frequency change support -added mods from Stefan Eletzhofer and Lothar Weissmann - -# -# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher -# - -Index: linux-2.6.15gum/arch/arm/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/Kconfig -+++ linux-2.6.15gum/arch/arm/Kconfig -@@ -549,7 +549,7 @@ config XIP_PHYS_ADDR - - endmenu - --if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP1) -+if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP1 || ARCH_PXA) - - menu "CPU Frequency scaling" - -@@ -578,6 +578,12 @@ config CPU_FREQ_INTEGRATOR - - endmenu - -+config CPU_FREQ_PXA -+ bool -+ depends on CPU_FREQ && ARCH_PXA -+ default y -+ select CPU_FREQ_DEFAULT_GOV_USERSPACE -+ - endif - - menu "Floating point emulation" -Index: linux-2.6.15gum/arch/arm/mach-pxa/Makefile -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-pxa/Makefile -+++ linux-2.6.15gum/arch/arm/mach-pxa/Makefile -@@ -29,6 +29,7 @@ obj-$(CONFIG_LEDS) += $(led-y) - # Misc features - obj-$(CONFIG_PM) += pm.o sleep.o - obj-$(CONFIG_PXA_SSP) += ssp.o -+obj-$(CONFIG_CPU_FREQ) += cpu-pxa.o - - ifeq ($(CONFIG_PXA27x),y) - obj-$(CONFIG_PM) += standby.o -Index: linux-2.6.15gum/arch/arm/mach-pxa/cpu-pxa.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/arch/arm/mach-pxa/cpu-pxa.c -@@ -0,0 +1,321 @@ -+/* -+ * linux/arch/arm/mach-pxa/cpu-pxa.c -+ * -+ * Copyright (C) 2002,2003 Intrinsyc Software -+ * -+ * 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. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ * -+ * History: -+ * 31-Jul-2002 : Initial version [FB] -+ * 29-Jan-2003 : added PXA255 support [FB] -+ * 20-Apr-2003 : ported to v2.5 (Dustin McIntire, Sensoria Corp.) -+ * -+ * Note: -+ * This driver may change the memory bus clock rate, but will not do any -+ * platform specific access timing changes... for example if you have flash -+ * memory connected to CS0, you will need to register a platform specific -+ * notifier which will adjust the memory access strobes to maintain a -+ * minimum strobe width. -+ * -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/module.h> -+#include <linux/sched.h> -+#include <linux/init.h> -+#include <linux/cpufreq.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+ -+#define DEBUG 0 -+ -+#ifdef DEBUG -+ static unsigned int freq_debug = DEBUG; -+ MODULE_PARM(freq_debug, "i"); -+ MODULE_PARM_DESC(freq_debug, "Set the debug messages to on=1/off=0"); -+#else -+ #define freq_debug 0 -+#endif -+ -+typedef struct -+{ -+ unsigned int khz; -+ unsigned int membus; -+ unsigned int cccr; -+ unsigned int div2; -+} pxa_freqs_t; -+ -+/* Define the refresh period in mSec for the SDRAM and the number of rows */ -+#define SDRAM_TREF 64 /* standard 64ms SDRAM */ -+#define SDRAM_ROWS 4096 /* 64MB=8192 32MB=4096 */ -+#define MDREFR_DRI(x) ((x*SDRAM_TREF)/(SDRAM_ROWS*32)) -+ -+#define CCLKCFG_TURBO 0x1 -+#define CCLKCFG_FCS 0x2 -+#define PXA25x_MIN_FREQ 99500 -+#define PXA25x_MAX_FREQ 398100 -+#define MDREFR_DB2_MASK (MDREFR_K2DB2 | MDREFR_K1DB2) -+#define MDREFR_DRI_MASK 0xFFF -+ -+ -+/* Use the run mode frequencies for the CPUFREQ_POLICY_PERFORMANCE policy */ -+static pxa_freqs_t pxa255_run_freqs[] = -+{ -+ /* CPU MEMBUS CCCR DIV2*/ -+ { 99500, 99500, 0x121, 1}, /* run= 99, turbo= 99, PXbus=50, SDRAM=50 */ -+ {132700, 132700, 0x123, 1}, /* run=133, turbo=133, PXbus=66, SDRAM=66 */ -+ {199100, 99500, 0x141, 0}, /* run=199, turbo=199, PXbus=99, SDRAM=99 */ -+ {265400, 132700, 0x143, 1}, /* run=265, turbo=265, PXbus=133, SDRAM=66 */ -+ {331800, 165900, 0x145, 1}, /* run=331, turbo=331, PXbus=166, SDRAM=83 */ -+ {398100, 99500, 0x161, 0}, /* run=398, turbo=398, PXbus=196, SDRAM=99 */ -+ {0,} -+}; -+#define NUM_RUN_FREQS (sizeof(pxa255_run_freqs)/sizeof(pxa_freqs_t)) -+ -+static struct cpufreq_frequency_table pxa255_run_freq_table[NUM_RUN_FREQS+1]; -+ -+/* Use the turbo mode frequencies for the CPUFREQ_POLICY_POWERSAVE policy */ -+static pxa_freqs_t pxa255_turbo_freqs[] = -+{ -+ /* CPU MEMBUS CCCR DIV2*/ -+ { 99500, 99500, 0x121, 1}, /* run=99, turbo= 99, PXbus=50, SDRAM=50 */ -+ {199100, 99500, 0x221, 0}, /* run=99, turbo=199, PXbus=50, SDRAM=99 */ -+ {298500, 99500, 0x321, 0}, /* run=99, turbo=287, PXbus=50, SDRAM=99 */ -+ {298600, 99500, 0x1c1, 0}, /* run=199, turbo=287, PXbus=99, SDRAM=99 */ -+ {398100, 99500, 0x241, 0}, /* run=199, turbo=398, PXbus=99, SDRAM=99 */ -+ {0,} -+}; -+#define NUM_TURBO_FREQS (sizeof(pxa255_turbo_freqs)/sizeof(pxa_freqs_t)) -+ -+static struct cpufreq_frequency_table pxa255_turbo_freq_table[NUM_TURBO_FREQS+1]; -+ -+extern unsigned get_clk_frequency_khz(int info); -+ -+/* find a valid frequency point */ -+static int pxa_verify_policy(struct cpufreq_policy *policy) -+{ -+ int ret; -+ struct cpufreq_frequency_table *pxa_freqs_table; -+ -+ if(policy->policy == CPUFREQ_POLICY_PERFORMANCE) { -+ pxa_freqs_table = pxa255_run_freq_table; -+ } else if (policy->policy == CPUFREQ_POLICY_POWERSAVE) { -+ pxa_freqs_table = pxa255_turbo_freq_table; -+ } else { -+ printk("CPU PXA: Unknown policy found. " -+ "Using CPUFREQ_POLICY_PERFORMANCE\n"); -+ pxa_freqs_table = pxa255_run_freq_table; -+ } -+ ret=cpufreq_frequency_table_verify(policy, pxa_freqs_table); -+ -+ if(freq_debug) { -+ printk("Verified CPU policy: %dKhz min to %dKhz max\n", -+ policy->min, policy->max); -+ } -+ -+ return ret; -+} -+ -+static int pxa_set_target(struct cpufreq_policy *policy, -+ unsigned int target_freq, -+ unsigned int relation) -+{ -+ int idx; -+ unsigned long cpus_allowed; -+ int cpu = policy->cpu; -+ struct cpufreq_freqs freqs; -+ pxa_freqs_t *pxa_freq_settings; -+ struct cpufreq_frequency_table *pxa_freqs_table; -+ unsigned long flags; -+ unsigned int unused; -+ unsigned int preset_mdrefr, postset_mdrefr; -+ -+ /* -+ * Save this threads cpus_allowed mask. -+ */ -+ cpus_allowed = current->cpus_allowed; -+ -+ /* -+ * Bind to the specified CPU. When this call returns, -+ * we should be running on the right CPU. -+ */ -+ set_cpus_allowed(current, 1 << cpu); -+ BUG_ON(cpu != smp_processor_id()); -+ -+ /* Get the current policy */ -+ if(policy->policy == CPUFREQ_POLICY_PERFORMANCE) { -+ pxa_freq_settings = pxa255_run_freqs; -+ pxa_freqs_table = pxa255_run_freq_table; -+ }else if (policy->policy == CPUFREQ_POLICY_POWERSAVE) { -+ pxa_freq_settings = pxa255_turbo_freqs; -+ pxa_freqs_table = pxa255_turbo_freq_table; -+ }else { -+ printk("CPU PXA: Unknown policy found. " -+ "Using CPUFREQ_POLICY_PERFORMANCE\n"); -+ pxa_freq_settings = pxa255_run_freqs; -+ pxa_freqs_table = pxa255_run_freq_table; -+ } -+ -+ /* Lookup the next frequency */ -+ if (cpufreq_frequency_table_target(policy, pxa_freqs_table, -+ target_freq, relation, &idx)) { -+ return -EINVAL; -+ } -+ -+ freqs.old = policy->cur; -+ freqs.new = pxa_freq_settings[idx].khz; -+ freqs.cpu = policy->cpu; -+ if(freq_debug) { -+ printk(KERN_INFO "Changing CPU frequency to %d Mhz, (SDRAM %d Mhz)\n", -+ freqs.new/1000, (pxa_freq_settings[idx].div2) ? -+ (pxa_freq_settings[idx].membus/2000) : -+ (pxa_freq_settings[idx].membus/1000)); -+ } -+ -+ void *ramstart = phys_to_virt(0xa0000000); -+ -+ /* -+ * Tell everyone what we're about to do... -+ * you should add a notify client with any platform specific -+ * Vcc changing capability -+ */ -+ cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE); -+ -+ /* Calculate the next MDREFR. If we're slowing down the SDRAM clock -+ * we need to preset the smaller DRI before the change. If we're speeding -+ * up we need to set the larger DRI value after the change. -+ */ -+ preset_mdrefr = postset_mdrefr = MDREFR; -+ if((MDREFR & MDREFR_DRI_MASK) > MDREFR_DRI(pxa_freq_settings[idx].membus)) { -+ preset_mdrefr = (preset_mdrefr & ~MDREFR_DRI_MASK) | -+ MDREFR_DRI(pxa_freq_settings[idx].membus); -+ } -+ postset_mdrefr = (postset_mdrefr & ~MDREFR_DRI_MASK) | -+ MDREFR_DRI(pxa_freq_settings[idx].membus); -+ -+ /* If we're dividing the memory clock by two for the SDRAM clock, this -+ * must be set prior to the change. Clearing the divide must be done -+ * after the change. -+ */ -+ if(pxa_freq_settings[idx].div2) { -+ preset_mdrefr |= MDREFR_DB2_MASK; -+ postset_mdrefr |= MDREFR_DB2_MASK; -+ } else { -+ postset_mdrefr &= ~MDREFR_DB2_MASK; -+ } -+ -+ local_irq_save(flags); -+ -+ /* Set new the CCCR */ -+ CCCR = pxa_freq_settings[idx].cccr; -+ -+ __asm__ __volatile__(" \ -+ ldr r4, [%1] ; /* load MDREFR */ \ -+ b 2f ; \ -+ .align 5 ; \ -+1: \ -+ str %4, [%1] ; /* preset the MDREFR */ \ -+ mcr p14, 0, %2, c6, c0, 0 ; /* set CCLKCFG[FCS] */ \ -+ str %5, [%1] ; /* postset the MDREFR */ \ -+ \ -+ b 3f ; \ -+2: b 1b ; \ -+3: nop ; \ -+ " -+ : "=&r" (unused) -+ : "r" (&MDREFR), "r" (CCLKCFG_TURBO|CCLKCFG_FCS), "r" (ramstart), \ -+ "r" (preset_mdrefr), "r" (postset_mdrefr) -+ : "r4", "r5"); -+ local_irq_restore(flags); -+ -+ /* -+ * Restore the CPUs allowed mask. -+ */ -+ set_cpus_allowed(current, cpus_allowed); -+ -+ /* -+ * Tell everyone what we've just done... -+ * you should add a notify client with any platform specific -+ * SDRAM refresh timer adjustments -+ */ -+ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); -+ -+ return 0; -+} -+ -+static int pxa_cpufreq_init(struct cpufreq_policy *policy) -+{ -+ unsigned long cpus_allowed; -+ unsigned int cpu = policy->cpu; -+ int i; -+ -+ cpus_allowed = current->cpus_allowed; -+ -+ set_cpus_allowed(current, 1 << cpu); -+ BUG_ON(cpu != smp_processor_id()); -+ -+ /* set default policy and cpuinfo */ -+ policy->governor = CPUFREQ_DEFAULT_GOVERNOR; -+ policy->policy = CPUFREQ_POLICY_PERFORMANCE; -+ policy->cpuinfo.max_freq = PXA25x_MAX_FREQ; -+ policy->cpuinfo.min_freq = PXA25x_MIN_FREQ; -+ policy->cpuinfo.transition_latency = 1000; /* FIXME: 1 ms, assumed */ -+ policy->cur = get_clk_frequency_khz(0); /* current freq */ -+ policy->min = policy->max = policy->cur; -+ -+ /* Generate the run cpufreq_frequency_table struct */ -+ for(i=0;i<NUM_RUN_FREQS;i++) { -+ pxa255_run_freq_table[i].frequency = pxa255_run_freqs[i].khz; -+ pxa255_run_freq_table[i].index = i; -+ } -+ pxa255_run_freq_table[i].frequency = CPUFREQ_TABLE_END; -+ /* Generate the turbo cpufreq_frequency_table struct */ -+ for(i=0;i<NUM_TURBO_FREQS;i++) { -+ pxa255_turbo_freq_table[i].frequency = pxa255_turbo_freqs[i].khz; -+ pxa255_turbo_freq_table[i].index = i; -+ } -+ pxa255_turbo_freq_table[i].frequency = CPUFREQ_TABLE_END; -+ -+ set_cpus_allowed(current, cpus_allowed); -+ printk(KERN_INFO "PXA CPU frequency change support initialized\n"); -+ -+ return 0; -+} -+ -+static struct cpufreq_driver pxa_cpufreq_driver = { -+ .verify = pxa_verify_policy, -+ .target = pxa_set_target, -+ .init = pxa_cpufreq_init, -+ .name = "PXA25x", -+}; -+ -+static int __init pxa_cpu_init(void) -+{ -+ return cpufreq_register_driver(&pxa_cpufreq_driver); -+} -+ -+static void __exit pxa_cpu_exit(void) -+{ -+ cpufreq_unregister_driver(&pxa_cpufreq_driver); -+} -+ -+ -+MODULE_AUTHOR ("Intrinsyc Software Inc."); -+MODULE_DESCRIPTION ("CPU frequency changing driver for the PXA architecture"); -+MODULE_LICENSE("GPL"); -+module_init(pxa_cpu_init); -+module_exit(pxa_cpu_exit); -+ -Index: linux-2.6.15gum/Documentation/cpu-freq/user-guide.txt -=================================================================== ---- linux-2.6.15gum.orig/Documentation/cpu-freq/user-guide.txt -+++ linux-2.6.15gum/Documentation/cpu-freq/user-guide.txt -@@ -18,7 +18,7 @@ - Contents: - --------- - 1. Supported Architectures and Processors --1.1 ARM -+1.1 ARM, PXA - 1.2 x86 - 1.3 sparc64 - 1.4 ppc -@@ -37,14 +37,15 @@ Contents: - 1. Supported Architectures and Processors - ========================================= - --1.1 ARM --------- -+1.1 ARM, PXA -+------------ - - The following ARM processors are supported by cpufreq: - - ARM Integrator - ARM-SA1100 - ARM-SA1110 -+Intel PXA - - - 1.2 x86 diff --git a/recipes/linux/linux-gumstix-2.6.15/board-init.patch b/recipes/linux/linux-gumstix-2.6.15/board-init.patch deleted file mode 100644 index 062e97f029..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/board-init.patch +++ /dev/null @@ -1,98 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/mach-pxa/gumstix.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/arch/arm/mach-pxa/gumstix.c -@@ -0,0 +1,93 @@ -+/* -+ * linux/arch/arm/mach-pxa/gumstix.c -+ * -+ * Support for the Gumstix computer platform -+ * -+ * Author: Craig Hughes -+ * Created: December 8 2004 -+ * Copyright: (C) 2004, Craig Hughes -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <asm/types.h> -+ -+#include <linux/init.h> -+#include <linux/device.h> -+#include <linux/platform_device.h> -+ -+#include <asm/hardware.h> -+#include <asm/mach-types.h> -+#include <asm/mach/arch.h> -+#include <asm/arch/udc.h> -+#include <asm/arch/mmc.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/arch/gumstix.h> -+ -+#include "generic.h" -+ -+static int gumstix_mci_init(struct device *dev, irqreturn_t (*lubbock_detect_int)(int, void *, struct pt_regs *), void *data) -+{ -+ // Set up MMC controller -+ pxa_gpio_mode(GPIO6_MMCCLK_MD); -+ pxa_gpio_mode(GPIO53_MMCCLK_MD); -+ pxa_gpio_mode(GPIO8_MMCCS0_MD); -+ -+ return 0; -+} -+ -+static struct pxamci_platform_data gumstix_mci_platform_data = { -+ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, -+ .init = &gumstix_mci_init, -+}; -+ -+static int gumstix_udc_is_connected(void) -+{ -+ return !! (GPLR(GPIO_GUMSTIX_USB_GPIOn) & GPIO_bit(GPIO_GUMSTIX_USB_GPIOn)); -+} -+ -+static void gumstix_udc_command(int connect_command) -+{ -+ if (connect_command == PXA2XX_UDC_CMD_CONNECT) { -+ pxa_gpio_mode(GPIO_GUMSTIX_USB_GPIOx_CON_MD); -+ GPSR(GPIO_GUMSTIX_USB_GPIOx) = GPIO_bit(GPIO_GUMSTIX_USB_GPIOx); -+ } -+ if (connect_command == PXA2XX_UDC_CMD_DISCONNECT) { -+ GPCR(GPIO_GUMSTIX_USB_GPIOx) = GPIO_bit(GPIO_GUMSTIX_USB_GPIOx); -+ pxa_gpio_mode(GPIO_GUMSTIX_USB_GPIOx_DIS_MD); -+ } -+} -+ -+static struct pxa2xx_udc_mach_info gumstix_udc_info __initdata = { -+ .udc_is_connected = gumstix_udc_is_connected, -+ .udc_command = gumstix_udc_command, -+}; -+ -+static struct platform_device gum_audio_device = { -+ .name = "pxa2xx-ac97", -+ .id = -1, -+}; -+ -+static struct platform_device *devices[] __initdata = { -+ &gum_audio_device, -+}; -+ -+static void __init gumstix_init(void) -+{ -+ pxa_set_mci_info(&gumstix_mci_platform_data); -+ pxa_set_udc_info(&gumstix_udc_info); -+ (void) platform_add_devices(devices, ARRAY_SIZE(devices)); -+} -+ -+MACHINE_START(GUMSTIX, "The Gumstix Platform") -+ .phys_ram = 0xa0000000, -+ .phys_io = 0x40000000, -+ .boot_params = 0xa0000100, -+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, -+ .timer = &pxa_timer, -+ .map_io = pxa_map_io, -+ .init_irq = pxa_init_irq, -+ .init_machine = gumstix_init, -+MACHINE_END diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-i2c-include.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-i2c-include.patch deleted file mode 100644 index 5cc3a0bcfa..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-i2c-include.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: linux-2.6.15gum/drivers/i2c/busses/i2c-pxa.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/i2c/busses/i2c-pxa.c -+++ linux-2.6.15gum/drivers/i2c/busses/i2c-pxa.c -@@ -32,6 +32,7 @@ - #include <linux/i2c-pxa.h> - #include <linux/platform_device.h> - -+#include <asm/arch/pxa-regs.h> - #include <asm/hardware.h> - #include <asm/irq.h> - #include <asm/arch/i2c.h> diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-mmc-clock.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-mmc-clock.patch deleted file mode 100644 index 0b93fffaef..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-mmc-clock.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: linux-2.6.15gum/drivers/mmc/pxamci.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/mmc/pxamci.c -+++ linux-2.6.15gum/drivers/mmc/pxamci.c -@@ -381,8 +381,7 @@ static void pxamci_set_ios(struct mmc_ho - - if (ios->clock) { - unsigned int clk = CLOCKRATE / ios->clock; -- if (CLOCKRATE / clk > ios->clock) -- clk <<= 1; -+ if(clk > (1<<6)) clk = (1<<6); - host->clkrt = fls(clk) - 1; - pxa_set_cken(CKEN12_MMC, 1); - diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-mtd-onenand.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-mtd-onenand.patch deleted file mode 100644 index 1b1662e963..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-mtd-onenand.patch +++ /dev/null @@ -1,22 +0,0 @@ -Index: linux-2.6.15gum/drivers/mtd/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/mtd/Kconfig -+++ linux-2.6.15gum/drivers/mtd/Kconfig -@@ -271,7 +271,5 @@ source "drivers/mtd/devices/Kconfig" - - source "drivers/mtd/nand/Kconfig" - --source "drivers/mtd/onenand/Kconfig" -- - endmenu - -Index: linux-2.6.15gum/drivers/mtd/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/mtd/Makefile -+++ linux-2.6.15gum/drivers/mtd/Makefile -@@ -25,4 +25,4 @@ obj-$(CONFIG_RFD_FTL) += rfd_ftl.o mtd_ - nftl-objs := nftlcore.o nftlmount.o - inftl-objs := inftlcore.o inftlmount.o - --obj-y += chips/ maps/ devices/ nand/ onenand/ -+obj-y += chips/ maps/ devices/ nand/ diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-audio.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-audio.patch deleted file mode 100644 index a8d04f0e20..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-audio.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: linux-2.6.15gum/sound/oss/pxa-audio.c -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/pxa-audio.c -+++ linux-2.6.15gum/sound/oss/pxa-audio.c -@@ -731,7 +731,7 @@ static int audio_mmap(struct file *file, - audio_buf_t *buf = &s->buffers[i]; - if (!buf->master) - continue; -- ret = remap_page_range(vma, vma->vm_start, buf->dma_desc->dsadr, -+ ret = io_remap_page_range(vma, vma_addr, buf->dma_desc->dsadr, - buf->master, vma->vm_page_prot); - if (ret) - return ret; -Index: linux-2.6.15gum/sound/oss/pxa-audio.h -=================================================================== ---- linux-2.6.15gum.orig/sound/oss/pxa-audio.h -+++ linux-2.6.15gum/sound/oss/pxa-audio.h -@@ -52,3 +52,7 @@ typedef struct { - extern int pxa_audio_attach(struct inode *inode, struct file *file, - audio_state_t *state); - extern void pxa_audio_clear_buf(audio_stream_t *s); -+ -+#define DCMD_TXPCDR (DCMD_INCSRCADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4) -+#define DCMD_RXMCDR (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4) -+#define DCMD_RXPCDR (DCMD_INCTRGADDR|DCMD_FLOWSRC|DCMD_BURST32|DCMD_WIDTH4) diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-cpufreq.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-cpufreq.patch deleted file mode 100644 index 6d2f2b3267..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-cpufreq.patch +++ /dev/null @@ -1,64 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/mach-pxa/cpu-pxa.c -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-pxa/cpu-pxa.c -+++ linux-2.6.15gum/arch/arm/mach-pxa/cpu-pxa.c -@@ -60,7 +60,7 @@ typedef struct - - /* Define the refresh period in mSec for the SDRAM and the number of rows */ - #define SDRAM_TREF 64 /* standard 64ms SDRAM */ --#define SDRAM_ROWS 4096 /* 64MB=8192 32MB=4096 */ -+#define SDRAM_ROWS 8192 /* 64MB=8192 32MB=4096 */ - #define MDREFR_DRI(x) ((x*SDRAM_TREF)/(SDRAM_ROWS*32)) - - #define CCLKCFG_TURBO 0x1 -@@ -136,7 +136,7 @@ static int pxa_set_target(struct cpufreq - unsigned int relation) - { - int idx; -- unsigned long cpus_allowed; -+ cpumask_t cpus_allowed; - int cpu = policy->cpu; - struct cpufreq_freqs freqs; - pxa_freqs_t *pxa_freq_settings; -@@ -144,6 +144,7 @@ static int pxa_set_target(struct cpufreq - unsigned long flags; - unsigned int unused; - unsigned int preset_mdrefr, postset_mdrefr; -+ void *ramstart; - - /* - * Save this threads cpus_allowed mask. -@@ -154,7 +155,7 @@ static int pxa_set_target(struct cpufreq - * Bind to the specified CPU. When this call returns, - * we should be running on the right CPU. - */ -- set_cpus_allowed(current, 1 << cpu); -+ set_cpus_allowed(current, cpumask_of_cpu(cpu)); - BUG_ON(cpu != smp_processor_id()); - - /* Get the current policy */ -@@ -187,7 +188,7 @@ static int pxa_set_target(struct cpufreq - (pxa_freq_settings[idx].membus/1000)); - } - -- void *ramstart = phys_to_virt(0xa0000000); -+ ramstart = phys_to_virt(0xa0000000); - - /* - * Tell everyone what we're about to do... -@@ -260,13 +261,13 @@ static int pxa_set_target(struct cpufreq - - static int pxa_cpufreq_init(struct cpufreq_policy *policy) - { -- unsigned long cpus_allowed; -+ cpumask_t cpus_allowed; - unsigned int cpu = policy->cpu; - int i; - - cpus_allowed = current->cpus_allowed; - -- set_cpus_allowed(current, 1 << cpu); -+ set_cpus_allowed(current, cpumask_of_cpu(cpu)); - BUG_ON(cpu != smp_processor_id()); - - /* set default policy and cpuinfo */ diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-serial-mctrl.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-serial-mctrl.patch deleted file mode 100644 index 574ac1ac62..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-pxa-serial-mctrl.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: linux-2.6.15gum/drivers/serial/pxa.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/serial/pxa.c -+++ linux-2.6.15gum/drivers/serial/pxa.c -@@ -277,7 +277,6 @@ static unsigned int serial_pxa_get_mctrl - unsigned char status; - unsigned int ret; - --return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR; - status = serial_in(up, UART_MSR); - - ret = 0; diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-rndis.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-rndis.patch deleted file mode 100644 index d51597f94b..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-rndis.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: linux-2.6.15gum/drivers/usb/gadget/ether.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/usb/gadget/ether.c -+++ linux-2.6.15gum/drivers/usb/gadget/ether.c -@@ -2328,7 +2328,9 @@ autoconf_fail: - #ifdef DEV_CONFIG_CDC - /* pxa25x only does CDC subset; often used with RNDIS */ - } else if (cdc) { -+#ifdef DEV_CONFIG_CDC - control_intf.bNumEndpoints = 0; -+#endif - /* FIXME remove endpoint from descriptor list */ - #endif - } diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-serial-interrupt.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-serial-interrupt.patch deleted file mode 100644 index df4a46e030..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-serial-interrupt.patch +++ /dev/null @@ -1,25 +0,0 @@ -Index: linux-2.6.15gum/drivers/serial/pxa.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/serial/pxa.c -+++ linux-2.6.15gum/drivers/serial/pxa.c -@@ -246,15 +246,19 @@ serial_pxa_irq(int irq, void *dev_id, st - struct uart_pxa_port *up = (struct uart_pxa_port *)dev_id; - unsigned int iir, lsr; - -+ serial_out(up, UART_MCR, serial_in(up, UART_MCR) & ~UART_MCR_RTS); // Clear RTS - iir = serial_in(up, UART_IIR); - if (iir & UART_IIR_NO_INT) -- return IRQ_NONE; -+ { -+ //printk(KERN_WARNING "serial_pxa_irq: odd -- interrupt triggered, but no interrupt in IIR: %08x\n",iir); -+ } - lsr = serial_in(up, UART_LSR); - if (lsr & UART_LSR_DR) - receive_chars(up, &lsr, regs); - check_modem_status(up); - if (lsr & UART_LSR_THRE) - transmit_chars(up); -+ serial_out(up, UART_MCR, serial_in(up, UART_MCR) | UART_MCR_RTS); // Assert RTS - return IRQ_HANDLED; - } - diff --git a/recipes/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch b/recipes/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch deleted file mode 100644 index fcef7c27c3..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/bugfix-serial-register-status.patch +++ /dev/null @@ -1,70 +0,0 @@ -Index: linux-2.6.15gum/drivers/serial/pxa.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/serial/pxa.c -+++ linux-2.6.15gum/drivers/serial/pxa.c -@@ -58,6 +58,8 @@ struct uart_pxa_port { - unsigned int lsr_break_flag; - unsigned int cken; - char *name; -+ unsigned int msr; //djf -+ unsigned int lsr; //djf - }; - - static inline unsigned int serial_in(struct uart_pxa_port *up, int offset) -@@ -169,6 +171,7 @@ receive_chars(struct uart_pxa_port *up, - - ignore_char: - *status = serial_in(up, UART_LSR); -+ up->lsr = *status; - } while ((*status & UART_LSR_DR) && (max_count-- > 0)); - tty_flip_buffer_push(tty); - } -@@ -221,7 +224,7 @@ static inline void check_modem_status(st - int status; - - status = serial_in(up, UART_MSR); -- -+ up->msr = status; - if ((status & UART_MSR_ANY_DELTA) == 0) - return; - -@@ -253,6 +256,7 @@ serial_pxa_irq(int irq, void *dev_id, st - //printk(KERN_WARNING "serial_pxa_irq: odd -- interrupt triggered, but no interrupt in IIR: %08x\n",iir); - } - lsr = serial_in(up, UART_LSR); -+ up->lsr = lsr; - if (lsr & UART_LSR_DR) - receive_chars(up, &lsr, regs); - check_modem_status(up); -@@ -269,7 +273,8 @@ static unsigned int serial_pxa_tx_empty( - unsigned int ret; - - spin_lock_irqsave(&up->port.lock, flags); -- ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; -+ //ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0; -+ ret = up->lsr * UART_LSR_TEMT ? TIOCSER_TEMT : 0; - spin_unlock_irqrestore(&up->port.lock, flags); - - return ret; -@@ -281,7 +286,7 @@ static unsigned int serial_pxa_get_mctrl - unsigned char status; - unsigned int ret; - -- status = serial_in(up, UART_MSR); -+ status = up->msr; - - ret = 0; - if (status & UART_MSR_DCD) -@@ -411,10 +416,10 @@ static int serial_pxa_startup(struct uar - /* - * And clear the interrupt registers again for luck. - */ -- (void) serial_in(up, UART_LSR); -+ up->lsr = serial_in(up, UART_LSR); - (void) serial_in(up, UART_RX); - (void) serial_in(up, UART_IIR); -- (void) serial_in(up, UART_MSR); -+ up->msr = serial_in(up, UART_MSR); - - return 0; - } diff --git a/recipes/linux/linux-gumstix-2.6.15/compact-flash.patch b/recipes/linux/linux-gumstix-2.6.15/compact-flash.patch deleted file mode 100644 index c3913a23df..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/compact-flash.patch +++ /dev/null @@ -1,171 +0,0 @@ -Index: linux-2.6.15gum/drivers/pcmcia/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/pcmcia/Makefile -+++ linux-2.6.15gum/drivers/pcmcia/Makefile -@@ -68,4 +68,4 @@ - pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o - pxa2xx_cs-$(CONFIG_MACH_MAINSTONE) += pxa2xx_mainstone.o - pxa2xx_cs-$(CONFIG_PXA_SHARPSL) += pxa2xx_sharpsl.o -- -+pxa2xx_cs-$(CONFIG_ARCH_GUMSTIX) += pxa2xx_gumstix.o -Index: linux-2.6.15gum/drivers/pcmcia/pxa2xx_gumstix.c ---- /dev/null -+++ linux-2.6.15gum/drivers/pcmcia/pxa2xx_gumstix.c -@@ -0,0 +1,157 @@ -+/* -+ * linux/drivers/pcmcia/pxa2xx_gumstix.c -+ * -+ * Gumstix PCMCIA specific routines. Based on Mainstone -+ * -+ * Copyright 2004, Craig Hughes <craig@gumstix.com> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <linux/module.h> -+#include <linux/init.h> -+#include <linux/kernel.h> -+#include <linux/errno.h> -+#include <linux/interrupt.h> -+#include <linux/device.h> -+#include <linux/platform_device.h> -+ -+#include <pcmcia/ss.h> -+ -+#include <asm/hardware.h> -+#include <asm/delay.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/irq.h> -+ -+#include <asm/arch/gumstix.h> -+ -+#include "soc_common.h" -+ -+static struct pcmcia_irqs irqs[] = { -+ { 0, GUMSTIX_nPCD1_IRQ, "CF nCD" }, -+ { 0, GUMSTIX_nSTSCHG_IRQ, "CF nSTSCHG" }, -+}; -+ -+static int gumstix_pcmcia_hw_init(struct soc_pcmcia_socket *skt) -+{ -+ pxa_gpio_mode(GPIO8_RESET_MD); -+ GPSR(GPIO8_RESET) = GPIO_bit(GPIO8_RESET); -+ udelay(50); -+ GPCR(GPIO8_RESET) = GPIO_bit(GPIO8_RESET); -+ -+ pxa_gpio_mode(GPIO4_nBVD1_MD); -+ pxa_gpio_mode(GPIO36_nBVD2_MD); -+ pxa_gpio_mode(GPIO11_nPCD1_MD); -+ pxa_gpio_mode(GPIO26_PRDY_nBSY0_MD); -+ -+ /* -+ * Setup default state of GPIO outputs -+ * before we enable them as outputs. -+ */ -+ GPSR(GPIO48_nPOE) = -+ GPIO_bit(GPIO48_nPOE) | -+ GPIO_bit(GPIO49_nPWE) | -+ GPIO_bit(GPIO50_nPIOR) | -+ GPIO_bit(GPIO51_nPIOW) | -+ GPIO_bit(GPIO52_nPCE_1) | -+ GPIO_bit(GPIO53_nPCE_2); -+ -+ pxa_gpio_mode(GPIO48_nPOE_MD); -+ pxa_gpio_mode(GPIO49_nPWE_MD); -+ pxa_gpio_mode(GPIO50_nPIOR_MD); -+ pxa_gpio_mode(GPIO51_nPIOW_MD); -+ pxa_gpio_mode(GPIO52_nPCE_1_MD); -+ pxa_gpio_mode(GPIO53_nPCE_2_MD); -+ pxa_gpio_mode(GPIO54_pSKTSEL_MD); -+ pxa_gpio_mode(GPIO55_nPREG_MD); -+ pxa_gpio_mode(GPIO56_nPWAIT_MD); -+ pxa_gpio_mode(GPIO57_nIOIS16_MD); -+ -+ skt->irq = GUMSTIX_PRDY_nBSY0_IRQ; -+ -+ return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); -+} -+ -+static void gumstix_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) -+{ -+ soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); -+} -+ -+static unsigned long gum_pcmcia_status; -+ -+static void gumstix_pcmcia_socket_state(struct soc_pcmcia_socket *skt, -+ struct pcmcia_state *state) -+{ -+ state->detect = !(GPLR(GPIO11_nPCD1) & GPIO_bit(GPIO11_nPCD1)); -+ state->ready = !!(GPLR(GPIO26_PRDY_nBSY0) & GPIO_bit(GPIO26_PRDY_nBSY0)); -+ state->bvd1 = !!(GPLR(GPIO4_nBVD1) & GPIO_bit(GPIO4_nBVD1)); -+ state->bvd2 = 1; -+ state->vs_3v = 0; -+ state->vs_Xv = 0; -+ state->wrprot = 0; -+} -+ -+static int gumstix_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, -+ const socket_state_t *state) -+{ -+ return 0; -+} -+ -+static void gumstix_pcmcia_socket_init(struct soc_pcmcia_socket *skt) -+{ -+ soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); -+} -+ -+static void gumstix_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) -+{ -+ soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); -+} -+ -+static struct pcmcia_low_level gumstix_pcmcia_ops = { -+ .owner = THIS_MODULE, -+ .hw_init = gumstix_pcmcia_hw_init, -+ .hw_shutdown = gumstix_pcmcia_hw_shutdown, -+ .socket_state = gumstix_pcmcia_socket_state, -+ .configure_socket = gumstix_pcmcia_configure_socket, -+ .socket_init = gumstix_pcmcia_socket_init, -+ .socket_suspend = gumstix_pcmcia_socket_suspend, -+ .nr = 1, -+}; -+ -+static struct platform_device *gumstix_pcmcia_device; -+ -+static int __init gumstix_pcmcia_init(void) -+{ -+ int ret; -+ -+ gumstix_pcmcia_device = kmalloc(sizeof(*gumstix_pcmcia_device), GFP_KERNEL); -+ if (!gumstix_pcmcia_device) -+ return -ENOMEM; -+ memset(gumstix_pcmcia_device, 0, sizeof(*gumstix_pcmcia_device)); -+ gumstix_pcmcia_device->name = "pxa2xx-pcmcia"; -+ gumstix_pcmcia_device->dev.platform_data = &gumstix_pcmcia_ops; -+ -+ ret = platform_device_register(gumstix_pcmcia_device); -+ if (ret) -+ kfree(gumstix_pcmcia_device); -+ -+ return ret; -+} -+ -+static void __exit gumstix_pcmcia_exit(void) -+{ -+ /* -+ * This call is supposed to free our gumstix_pcmcia_device. -+ * Unfortunately platform_device don't have a free method, and -+ * we can't assume it's free of any reference at this point so we -+ * can't free it either. -+ */ -+ platform_device_unregister(gumstix_pcmcia_device); -+} -+ -+fs_initcall(gumstix_pcmcia_init); -+module_exit(gumstix_pcmcia_exit); -+ -+MODULE_LICENSE("GPL"); diff --git a/recipes/linux/linux-gumstix-2.6.15/cpufreq-better-freqs.patch b/recipes/linux/linux-gumstix-2.6.15/cpufreq-better-freqs.patch deleted file mode 100644 index 875d316f3e..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/cpufreq-better-freqs.patch +++ /dev/null @@ -1,53 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/mach-pxa/cpu-pxa.c -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-pxa/cpu-pxa.c -+++ linux-2.6.15gum/arch/arm/mach-pxa/cpu-pxa.c -@@ -65,8 +65,8 @@ typedef struct - - #define CCLKCFG_TURBO 0x1 - #define CCLKCFG_FCS 0x2 --#define PXA25x_MIN_FREQ 99500 --#define PXA25x_MAX_FREQ 398100 -+#define PXA25x_MIN_FREQ 99533 -+#define PXA25x_MAX_FREQ 530842 - #define MDREFR_DB2_MASK (MDREFR_K2DB2 | MDREFR_K1DB2) - #define MDREFR_DRI_MASK 0xFFF - -@@ -75,12 +75,14 @@ typedef struct - static pxa_freqs_t pxa255_run_freqs[] = - { - /* CPU MEMBUS CCCR DIV2*/ -- { 99500, 99500, 0x121, 1}, /* run= 99, turbo= 99, PXbus=50, SDRAM=50 */ -- {132700, 132700, 0x123, 1}, /* run=133, turbo=133, PXbus=66, SDRAM=66 */ -- {199100, 99500, 0x141, 0}, /* run=199, turbo=199, PXbus=99, SDRAM=99 */ -- {265400, 132700, 0x143, 1}, /* run=265, turbo=265, PXbus=133, SDRAM=66 */ -- {331800, 165900, 0x145, 1}, /* run=331, turbo=331, PXbus=166, SDRAM=83 */ -- {398100, 99500, 0x161, 0}, /* run=398, turbo=398, PXbus=196, SDRAM=99 */ -+ { 99533, 99533, 0x121, 1}, /* run= 99, turbo= 99, PXbus=50, SDRAM=50 */ -+ {132710, 132710, 0x123, 1}, /* run=133, turbo=133, PXbus=66, SDRAM=66 */ -+ {199066, 99533, 0x141, 0}, /* run=199, turbo=199, PXbus=99, SDRAM=99 */ -+ {265421, 132710, 0x143, 0}, /* run=265, turbo=265, PXbus=133, SDRAM=133 */ -+ {331776, 165888, 0x145, 1}, /* run=331, turbo=331, PXbus=166, SDRAM=83 */ -+ {398131, 99533, 0x161, 0}, /* run=398, turbo=398, PXbus=99, SDRAM=99 */ -+ {398131, 132710, 0x1c3, 0}, /* run=265, turbo=398, PXbus=133, SDRAM=133 */ -+ {530842, 132710, 0x163, 0}, /* run=531, turbo=531, PXbus=133, SDRAM=133 */ - {0,} - }; - #define NUM_RUN_FREQS (sizeof(pxa255_run_freqs)/sizeof(pxa_freqs_t)) -@@ -91,11 +93,11 @@ static struct cpufreq_frequency_table px - static pxa_freqs_t pxa255_turbo_freqs[] = - { - /* CPU MEMBUS CCCR DIV2*/ -- { 99500, 99500, 0x121, 1}, /* run=99, turbo= 99, PXbus=50, SDRAM=50 */ -- {199100, 99500, 0x221, 0}, /* run=99, turbo=199, PXbus=50, SDRAM=99 */ -- {298500, 99500, 0x321, 0}, /* run=99, turbo=287, PXbus=50, SDRAM=99 */ -- {298600, 99500, 0x1c1, 0}, /* run=199, turbo=287, PXbus=99, SDRAM=99 */ -- {398100, 99500, 0x241, 0}, /* run=199, turbo=398, PXbus=99, SDRAM=99 */ -+ { 99533, 99533, 0x121, 1}, /* run=99, turbo= 99, PXbus=99, SDRAM=50 */ -+ {149299, 99533, 0x1a1, 0}, /* run=99, turbo=149, PXbus=99, SDRAM=99 */ -+ {199066, 99533, 0x221, 0}, /* run=99, turbo=199, PXbus=99, SDRAM=99 */ -+ {298598, 99533, 0x321, 0}, /* run=99, turbo=299, PXbus=99, SDRAM=99 */ -+ {398131, 99533, 0x241, 1}, /* run=199, turbo=398, PXbus=99, SDRAM=50 */ - {0,} - }; - #define NUM_TURBO_FREQS (sizeof(pxa255_turbo_freqs)/sizeof(pxa_freqs_t)) diff --git a/recipes/linux/linux-gumstix-2.6.15/cpufreq-ondemand-by-default.patch b/recipes/linux/linux-gumstix-2.6.15/cpufreq-ondemand-by-default.patch deleted file mode 100644 index 5903ab275b..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/cpufreq-ondemand-by-default.patch +++ /dev/null @@ -1,42 +0,0 @@ -Index: linux-2.6.15gum/drivers/cpufreq/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/cpufreq/Kconfig -+++ linux-2.6.15gum/drivers/cpufreq/Kconfig -@@ -52,7 +52,7 @@ config CPU_FREQ_STAT_DETAILS - - choice - prompt "Default CPUFreq governor" -- default CPU_FREQ_DEFAULT_GOV_USERSPACE if CPU_FREQ_SA1100 || CPU_FREQ_SA1110 -+ default CPU_FREQ_DEFAULT_GOV_USERSPACE if CPU_FREQ_SA1100 || CPU_FREQ_SA1110 || CPU_FREQ_PXA - default CPU_FREQ_DEFAULT_GOV_PERFORMANCE - help - This option sets which CPUFreq governor shall be loaded at -@@ -75,6 +75,14 @@ config CPU_FREQ_DEFAULT_GOV_USERSPACE - program shall be able to set the CPU dynamically without having - to enable the userspace governor manually. - -+config CPU_FREQ_DEFAULT_GOV_ONDEMAND -+ bool "ondemand" -+ select CPU_FREQ_GOV_ONDEMAND -+ help -+ Use the CPUFreq governor 'ondemand' as default. This sets -+ the frequency dynamically based on CPU load, throttling up -+ and down as necessary. -+ - endchoice - - config CPU_FREQ_GOV_PERFORMANCE -Index: linux-2.6.15gum/include/linux/cpufreq.h -=================================================================== ---- linux-2.6.15gum.orig/include/linux/cpufreq.h -+++ linux-2.6.15gum/include/linux/cpufreq.h -@@ -268,6 +268,9 @@ extern struct cpufreq_governor cpufreq_g - #elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE) - extern struct cpufreq_governor cpufreq_gov_userspace; - #define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_userspace -+#elif defined(CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND) -+extern struct cpufreq_governor cpufreq_gov_dbs; -+#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_dbs; - #endif - - diff --git a/recipes/linux/linux-gumstix-2.6.15/defconfig-gumstix b/recipes/linux/linux-gumstix-2.6.15/defconfig-gumstix deleted file mode 100644 index 24c1aca43f..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/defconfig-gumstix +++ /dev/null @@ -1,995 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.15 -# Thu Jan 19 11:07:15 2006 -# -CONFIG_ARM=y -CONFIG_MMU=y -CONFIG_UID16=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -CONFIG_GENERIC_CALIBRATE_DELAY=y - -# -# Code maturity level options -# -CONFIG_EXPERIMENTAL=y -CONFIG_CLEAN_COMPILE=y -CONFIG_BROKEN_ON_SMP=y -CONFIG_INIT_ENV_ARG_LIMIT=32 - -# -# General setup -# -CONFIG_LOCALVERSION="gum" -CONFIG_LOCALVERSION_AUTO=y -# CONFIG_SWAP is not set -CONFIG_SYSVIPC=y -# CONFIG_POSIX_MQUEUE is not set -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y -# CONFIG_AUDIT is not set -CONFIG_HOTPLUG=y -CONFIG_KOBJECT_UEVENT=y -# CONFIG_IKCONFIG is not set -CONFIG_INITRAMFS_SOURCE="" -CONFIG_CC_OPTIMIZE_FOR_SIZE=y -CONFIG_EMBEDDED=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_BASE_FULL=y -# CONFIG_FUTEX is not set -# CONFIG_EPOLL is not set -# CONFIG_SHMEM is not set -CONFIG_CC_ALIGN_FUNCTIONS=0 -CONFIG_CC_ALIGN_LABELS=0 -CONFIG_CC_ALIGN_LOOPS=0 -CONFIG_CC_ALIGN_JUMPS=0 -CONFIG_TINY_SHMEM=y -CONFIG_BASE_SMALL=0 - -# -# Loadable module support -# -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -# CONFIG_MODULE_FORCE_UNLOAD is not set -CONFIG_OBSOLETE_MODPARM=y -# CONFIG_MODVERSIONS is not set -# CONFIG_MODULE_SRCVERSION_ALL is not set -CONFIG_KMOD=y - -# -# Block layer -# - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -# CONFIG_IOSCHED_AS is not set -# CONFIG_IOSCHED_DEADLINE is not set -# CONFIG_IOSCHED_CFQ is not set -# CONFIG_DEFAULT_AS is not set -# CONFIG_DEFAULT_DEADLINE is not set -# CONFIG_DEFAULT_CFQ is not set -CONFIG_DEFAULT_NOOP=y -CONFIG_DEFAULT_IOSCHED="noop" - -# -# System Type -# -# CONFIG_ARCH_CLPS7500 is not set -# CONFIG_ARCH_CLPS711X is not set -# CONFIG_ARCH_CO285 is not set -# CONFIG_ARCH_EBSA110 is not set -# CONFIG_ARCH_CAMELOT is not set -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_INTEGRATOR is not set -# CONFIG_ARCH_IOP3XX is not set -# CONFIG_ARCH_IXP4XX is not set -# CONFIG_ARCH_IXP2000 is not set -# CONFIG_ARCH_L7200 is not set -CONFIG_ARCH_PXA=y -# CONFIG_ARCH_RPC is not set -# CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_S3C2410 is not set -# CONFIG_ARCH_SHARK is not set -# CONFIG_ARCH_LH7A40X is not set -# CONFIG_ARCH_OMAP is not set -# CONFIG_ARCH_VERSATILE is not set -# CONFIG_ARCH_REALVIEW is not set -# CONFIG_ARCH_IMX is not set -# CONFIG_ARCH_H720X is not set -# CONFIG_ARCH_AAEC2000 is not set - -# -# Intel PXA2xx Implementations -# -CONFIG_ARCH_GUMSTIX=y -# CONFIG_ARCH_LUBBOCK is not set -# CONFIG_MACH_MAINSTONE is not set -# CONFIG_ARCH_PXA_IDP is not set -# CONFIG_PXA_SHARPSL is not set -# CONFIG_ARCH_GUMSTIX_ORIG is not set -CONFIG_ARCH_GUMSTIX_F=y -CONFIG_PXA25x=y - -# -# Processor Type -# -CONFIG_CPU_32=y -CONFIG_CPU_XSCALE=y -CONFIG_CPU_32v5=y -CONFIG_CPU_ABRT_EV5T=y -CONFIG_CPU_CACHE_VIVT=y -CONFIG_CPU_TLB_V4WBI=y - -# -# Processor Features -# -# CONFIG_ARM_THUMB is not set -CONFIG_XSCALE_PMU=y - -# -# Bus support -# -CONFIG_ISA_DMA_API=y -CONFIG_PROC_GPIO=m - -# -# PCCARD (PCMCIA/CardBus) support -# -CONFIG_PCCARD=m -# CONFIG_PCMCIA_DEBUG is not set -CONFIG_PCMCIA=m -CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_PCMCIA_IOCTL=y - -# -# PC-card bridges -# -CONFIG_PCMCIA_PXA2XX=m - -# -# Kernel Features -# -# CONFIG_PREEMPT is not set -# CONFIG_NO_IDLE_HZ is not set -# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -# CONFIG_SPARSEMEM_STATIC is not set -CONFIG_SPLIT_PTLOCK_CPUS=4096 -CONFIG_ALIGNMENT_TRAP=y - -# -# Boot options -# -CONFIG_ZBOOT_ROM_TEXT=0x0 -CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_CMDLINE="console=ttyS0,115200n8 root=1f02 rootfstype=jffs2 reboot=cold,hard" -# CONFIG_XIP_KERNEL is not set - -# -# CPU Frequency scaling -# -# CONFIG_CPU_FREQ is not set - -# -# Floating point emulation -# - -# -# At least one emulation must be selected -# -# CONFIG_FPE_NWFPE is not set -# CONFIG_FPE_FASTFPE is not set - -# -# Userspace binary formats -# -CONFIG_BINFMT_ELF=y -# CONFIG_BINFMT_AOUT is not set -# CONFIG_BINFMT_MISC is not set -# CONFIG_ARTHUR is not set - -# -# Power management options -# -# CONFIG_PM is not set - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -# CONFIG_NET_KEY is not set -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_FIB_HASH=y -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE is not set -# CONFIG_ARPD is not set -# CONFIG_SYN_COOKIES is not set -# CONFIG_INET_AH is not set -# CONFIG_INET_ESP is not set -# CONFIG_INET_IPCOMP is not set -# CONFIG_INET_TUNNEL is not set -CONFIG_INET_DIAG=y -CONFIG_INET_TCP_DIAG=y -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_BIC=y -# CONFIG_IPV6 is not set -# CONFIG_NETFILTER is not set - -# -# DCCP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_DCCP is not set - -# -# SCTP Configuration (EXPERIMENTAL) -# -# CONFIG_IP_SCTP is not set -# CONFIG_ATM is not set -# CONFIG_BRIDGE is not set -# CONFIG_VLAN_8021Q is not set -# CONFIG_DECNET is not set -# CONFIG_LLC2 is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_NET_DIVERT is not set -# CONFIG_ECONET is not set -# CONFIG_WAN_ROUTER is not set - -# -# QoS and/or fair queueing -# -# CONFIG_NET_SCHED is not set - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_HAMRADIO is not set -# CONFIG_IRDA is not set -CONFIG_BT=m -CONFIG_BT_GUMSTIX=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -# CONFIG_BT_HIDP is not set - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_H4=y -# CONFIG_BT_HCIUART_BCSP is not set -# CONFIG_BT_HCIDTL1 is not set -# CONFIG_BT_HCIBT3C is not set -# CONFIG_BT_HCIBLUECARD is not set -# CONFIG_BT_HCIBTUART is not set -# CONFIG_BT_HCIVHCI is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -# CONFIG_IEEE80211_CRYPT_CCMP is not set -# CONFIG_IEEE80211_CRYPT_TKIP is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_DEBUG_DRIVER is not set - -# -# Connector - unified userspace <-> kernelspace linker -# -# CONFIG_CONNECTOR is not set - -# -# Memory Technology Devices (MTD) -# -CONFIG_MTD=y -# CONFIG_MTD_DEBUG is not set -# CONFIG_MTD_CONCAT is not set -CONFIG_MTD_PARTITIONS=y -# CONFIG_MTD_REDBOOT_PARTS is not set -# CONFIG_MTD_CMDLINE_PARTS is not set -# CONFIG_MTD_AFS_PARTS is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=y -# CONFIG_MTD_JEDECPROBE is not set -CONFIG_MTD_GEN_PROBE=y -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -CONFIG_MTD_CFI_GEOMETRY=y -# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -CONFIG_MTD_MAP_BANK_WIDTH_2=y -# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -# CONFIG_MTD_CFI_I2 is not set -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_CFI_STAA is not set -CONFIG_MTD_CFI_UTIL=y -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -# CONFIG_MTD_ABSENT is not set -# CONFIG_MTD_XIP is not set - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -# CONFIG_MTD_PHYSMAP is not set -# CONFIG_MTD_MULTI_PHYSMAP is not set -CONFIG_MTD_GUMSTIX=y -# CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_SHARP_SL is not set -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PHRAM is not set -# CONFIG_MTD_MTDRAM is not set -# CONFIG_RAMTD is not set -# CONFIG_MTD_BLKMTD is not set -# CONFIG_MTD_BLOCK2MTD is not set - -# -# Disk-On-Chip Device Drivers -# -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOC2001PLUS is not set - -# -# NAND Flash Device Drivers -# -# CONFIG_MTD_NAND is not set - -# -# Parallel port support -# -# CONFIG_PARPORT is not set - -# -# Plug and Play support -# - -# -# Block devices -# -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=m -# CONFIG_BLK_DEV_CRYPTOLOOP is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_RAM is not set -CONFIG_BLK_DEV_RAM_COUNT=16 -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set - -# -# ATA/ATAPI/MFM/RLL support -# -CONFIG_IDE=m -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_IDE_SATA is not set -CONFIG_BLK_DEV_IDEDISK=m -# CONFIG_IDEDISK_MULTI_MODE is not set -CONFIG_BLK_DEV_IDECS=m -# CONFIG_BLK_DEV_IDECD is not set -# CONFIG_BLK_DEV_IDETAPE is not set -# CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_IDE_TASK_IOCTL is not set - -# -# IDE chipset support/bugfixes -# -CONFIG_IDE_GENERIC=m -# CONFIG_IDE_ARM is not set -# CONFIG_BLK_DEV_IDEDMA is not set -# CONFIG_IDEDMA_AUTO is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -# CONFIG_SCSI is not set - -# -# Multi-device support (RAID and LVM) -# -# CONFIG_MD is not set - -# -# Fusion MPT device support -# -# CONFIG_FUSION is not set - -# -# IEEE 1394 (FireWire) support -# - -# -# I2O device support -# - -# -# Network device support -# -CONFIG_NETDEVICES=y -# CONFIG_DUMMY is not set -# CONFIG_BONDING is not set -# CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set - -# -# PHY device support -# -# CONFIG_PHYLIB is not set - -# -# Ethernet (10 or 100Mbit) -# -CONFIG_NET_ETHERNET=y -CONFIG_MII=m -CONFIG_SMC91X=m -CONFIG_SMC91X_GUMSTIX=m -# CONFIG_DM9000 is not set - -# -# Ethernet (1000 Mbit) -# - -# -# Ethernet (10000 Mbit) -# - -# -# Token Ring devices -# - -# -# Wireless LAN (non-hamradio) -# -CONFIG_NET_RADIO=y - -# -# Obsolete Wireless cards support (pre-802.11) -# -# CONFIG_STRIP is not set -# CONFIG_PCMCIA_WAVELAN is not set -# CONFIG_PCMCIA_NETWAVE is not set - -# -# Wireless 802.11 Frequency Hopping cards support -# -# CONFIG_PCMCIA_RAYCS is not set - -# -# Wireless 802.11b ISA/PCI cards support -# -CONFIG_HERMES=m -# CONFIG_ATMEL is not set - -# -# Wireless 802.11b Pcmcia/Cardbus cards support -# -CONFIG_PCMCIA_HERMES=m -CONFIG_PCMCIA_SPECTRUM=m -# CONFIG_AIRO_CS is not set -# CONFIG_PCMCIA_WL3501 is not set -CONFIG_HOSTAP=m -CONFIG_HOSTAP_FIRMWARE=y -CONFIG_HOSTAP_CS=m -CONFIG_NET_WIRELESS=y - -# -# PCMCIA network device support -# -# CONFIG_NET_PCMCIA is not set - -# -# Wan interfaces -# -# CONFIG_WAN is not set -# CONFIG_PPP is not set -# CONFIG_SLIP is not set -# CONFIG_SHAPER is not set -# CONFIG_NETCONSOLE is not set -# CONFIG_NETPOLL is not set -# CONFIG_NET_POLL_CONTROLLER is not set - -# -# ISDN subsystem -# -# CONFIG_ISDN is not set - -# -# Input device support -# -# CONFIG_INPUT is not set - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set - -# -# Character devices -# -# CONFIG_VT is not set -# CONFIG_SERIAL_NONSTANDARD is not set - -# -# Serial drivers -# -# CONFIG_SERIAL_8250 is not set - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_PXA=y -CONFIG_SERIAL_PXA_CONSOLE=y -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set - -# -# IPMI -# -# CONFIG_IPMI_HANDLER is not set - -# -# Watchdog Cards -# -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -CONFIG_SA1100_WATCHDOG=m -# CONFIG_NVRAM is not set -# CONFIG_RTC is not set -# CONFIG_SA1100_RTC is not set -# CONFIG_DTLK is not set -# CONFIG_R3964 is not set - -# -# Ftape, the floppy tape device driver -# - -# -# PCMCIA character devices -# -# CONFIG_SYNCLINK_CS is not set -# CONFIG_CARDMAN_4000 is not set -# CONFIG_CARDMAN_4040 is not set -# CONFIG_RAW_DRIVER is not set - -# -# TPM devices -# -# CONFIG_TCG_TPM is not set -# CONFIG_TELCLOCK is not set - -# -# I2C support -# -# CONFIG_I2C is not set - -# -# Hardware Monitoring support -# -# CONFIG_HWMON is not set -# CONFIG_HWMON_VID is not set - -# -# Misc devices -# - -# -# Multimedia Capabilities Port drivers -# - -# -# Multimedia devices -# -# CONFIG_VIDEO_DEV is not set - -# -# Digital Video Broadcasting Devices -# -# CONFIG_DVB is not set - -# -# Graphics support -# -# CONFIG_FB is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_AC97_CODEC=m -CONFIG_SND_AC97_BUS=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -# CONFIG_SND_SEQUENCER is not set -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -# CONFIG_SND_VERBOSE_PRINTK is not set -# CONFIG_SND_DEBUG is not set - -# -# Generic devices -# -# CONFIG_SND_DUMMY is not set -# CONFIG_SND_MTPAV is not set -# CONFIG_SND_SERIAL_U16550 is not set -# CONFIG_SND_MPU401 is not set - -# -# ALSA ARM devices -# -CONFIG_SND_PXA2XX_PCM=m -CONFIG_SND_PXA2XX_AC97=m - -# -# PCMCIA devices -# - -# -# Open Sound System -# -# CONFIG_SOUND_PRIME is not set -# CONFIG_SOUND_WM97XX is not set - -# -# USB support -# -CONFIG_USB_ARCH_HAS_HCD=y -# CONFIG_USB_ARCH_HAS_OHCI is not set -# CONFIG_USB is not set - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# USB Gadget Support -# -CONFIG_USB_GADGET=m -# CONFIG_USB_GADGET_DEBUG_FILES is not set -CONFIG_USB_GADGET_SELECTED=y -CONFIG_USB_GADGET_GUMSTIX=m -# CONFIG_USB_GADGET_NET2280 is not set -CONFIG_USB_GADGET_PXA2XX=y -CONFIG_USB_PXA2XX=m -# CONFIG_USB_PXA2XX_SMALL is not set -# CONFIG_USB_GADGET_GOKU is not set -# CONFIG_USB_GADGET_LH7A40X is not set -# CONFIG_USB_GADGET_OMAP is not set -# CONFIG_USB_GADGET_DUMMY_HCD is not set -# CONFIG_USB_GADGET_DUALSPEED is not set -# CONFIG_USB_ZERO is not set -CONFIG_USB_ETH=m -CONFIG_USB_ETH_RNDIS=y -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set - -# -# MMC/SD Card support -# -CONFIG_MMC=m -# CONFIG_MMC_DEBUG is not set -CONFIG_MMC_BLOCK=m -CONFIG_MMC_PXA=m -# CONFIG_MMC_WBSD is not set - -# -# File systems -# -# CONFIG_EXT2_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_REISERFS_FS is not set -CONFIG_JFS=m -# CONFIG_FS_POSIX_ACL is not set -# CONFIG_XFS_FS is not set -# CONFIG_MINIX_FS is not set -# CONFIG_ROMFS_FS is not set -# CONFIG_INOTIFY is not set -# CONFIG_QUOTA is not set -# CONFIG_DNOTIFY is not set -# CONFIG_AUTOFS_FS is not set -# CONFIG_AUTOFS4_FS is not set -# CONFIG_FUSE_FS is not set - -# -# CD-ROM/DVD Filesystems -# -# CONFIG_ISO9660_FS is not set -# CONFIG_UDF_FS is not set - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -# CONFIG_MSDOS_FS is not set -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -# CONFIG_NTFS_FS is not set - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -# CONFIG_HUGETLB_PAGE is not set -CONFIG_RAMFS=y -# CONFIG_RELAYFS_FS is not set - -# -# Miscellaneous filesystems -# -# CONFIG_ADFS_FS is not set -# CONFIG_AFFS_FS is not set -# CONFIG_HFS_FS is not set -# CONFIG_HFSPLUS_FS is not set -# CONFIG_BEFS_FS is not set -# CONFIG_BFS_FS is not set -# CONFIG_EFS_FS is not set -# CONFIG_JFFS_FS is not set -CONFIG_JFFS2_FS=y -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -CONFIG_JFFS2_COMPRESSION_OPTIONS=y -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -CONFIG_JFFS2_RUBIN=y -# CONFIG_JFFS2_CMODE_NONE is not set -CONFIG_JFFS2_CMODE_PRIORITY=y -# CONFIG_JFFS2_CMODE_SIZE is not set -# CONFIG_CRAMFS is not set -# CONFIG_VXFS_FS is not set -# CONFIG_HPFS_FS is not set -# CONFIG_QNX4FS_FS is not set -# CONFIG_SYSV_FS is not set -# CONFIG_UFS_FS is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=m -CONFIG_NFS_V3=y -# CONFIG_NFS_V3_ACL is not set -# CONFIG_NFS_V4 is not set -# CONFIG_NFS_DIRECTIO is not set -# CONFIG_NFSD is not set -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=m -# CONFIG_RPCSEC_GSS_KRB5 is not set -# CONFIG_RPCSEC_GSS_SPKM3 is not set -# CONFIG_SMB_FS is not set -# CONFIG_CIFS is not set -# CONFIG_NCP_FS is not set -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -# CONFIG_9P_FS is not set - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -CONFIG_MSDOS_PARTITION=y -# CONFIG_BSD_DISKLABEL is not set -# CONFIG_MINIX_SUBPARTITION is not set -# CONFIG_SOLARIS_X86_PARTITION is not set -# CONFIG_UNIXWARE_DISKLABEL is not set -# CONFIG_LDM_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set -# CONFIG_EFI_PARTITION is not set - -# -# Native Language Support -# -CONFIG_NLS=m -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=m -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ASCII is not set -CONFIG_NLS_ISO8859_1=m -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_UTF8 is not set - -# -# Profiling support -# -# CONFIG_PROFILING is not set - -# -# Kernel hacking -# -# CONFIG_PRINTK_TIME is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_MAGIC_SYSRQ is not set -CONFIG_LOG_BUF_SHIFT=14 -CONFIG_DETECT_SOFTLOCKUP=y -# CONFIG_SCHEDSTATS is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_KOBJECT is not set -CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_FS is not set -# CONFIG_DEBUG_VM is not set -CONFIG_FRAME_POINTER=y -# CONFIG_RCU_TORTURE_TEST is not set -CONFIG_DEBUG_USER=y -# CONFIG_DEBUG_WAITQ is not set -CONFIG_DEBUG_ERRORS=y -# CONFIG_DEBUG_LL is not set - -# -# Security options -# -# CONFIG_KEYS is not set -# CONFIG_SECURITY is not set - -# -# Cryptographic options -# -CONFIG_CRYPTO=y -# CONFIG_CRYPTO_HMAC is not set -# CONFIG_CRYPTO_NULL is not set -# CONFIG_CRYPTO_MD4 is not set -# CONFIG_CRYPTO_MD5 is not set -# CONFIG_CRYPTO_SHA1 is not set -# CONFIG_CRYPTO_SHA256 is not set -# CONFIG_CRYPTO_SHA512 is not set -# CONFIG_CRYPTO_WP512 is not set -# CONFIG_CRYPTO_TGR192 is not set -# CONFIG_CRYPTO_DES is not set -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_TWOFISH is not set -# CONFIG_CRYPTO_SERPENT is not set -# CONFIG_CRYPTO_AES is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -# CONFIG_CRYPTO_TEA is not set -CONFIG_CRYPTO_ARC4=m -# CONFIG_CRYPTO_KHAZAD is not set -# CONFIG_CRYPTO_ANUBIS is not set -# CONFIG_CRYPTO_DEFLATE is not set -# CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_CRC32C is not set -# CONFIG_CRYPTO_TEST is not set - -# -# Hardware crypto devices -# - -# -# Library routines -# -# CONFIG_CRC_CCITT is not set -# CONFIG_CRC16 is not set -CONFIG_CRC32=y -# CONFIG_LIBCRC32C is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=y diff --git a/recipes/linux/linux-gumstix-2.6.15/defconfig.patch b/recipes/linux/linux-gumstix-2.6.15/defconfig.patch deleted file mode 100644 index 0cafd7e774..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/defconfig.patch +++ /dev/null @@ -1,766 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/configs/gumstix_defconfig -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/arch/arm/configs/gumstix_defconfig -@@ -0,0 +1,761 @@ -+# -+# Automatically generated make config: don't edit -+# -+CONFIG_ARM=y -+CONFIG_MMU=y -+CONFIG_UID16=y -+CONFIG_RWSEM_GENERIC_SPINLOCK=y -+ -+# -+# Code maturity level options -+# -+CONFIG_EXPERIMENTAL=y -+CONFIG_CLEAN_COMPILE=y -+CONFIG_BROKEN_ON_SMP=y -+ -+# -+# General setup -+# -+# CONFIG_SWAP is not set -+CONFIG_SYSVIPC=y -+# CONFIG_POSIX_MQUEUE is not set -+# CONFIG_BSD_PROCESS_ACCT is not set -+# CONFIG_SYSCTL is not set -+# CONFIG_AUDIT is not set -+CONFIG_LOG_BUF_SHIFT=14 -+CONFIG_HOTPLUG=y -+# CONFIG_IKCONFIG is not set -+CONFIG_EMBEDDED=y -+# CONFIG_KALLSYMS is not set -+# CONFIG_FUTEX is not set -+# CONFIG_EPOLL is not set -+CONFIG_IOSCHED_NOOP=y -+# CONFIG_IOSCHED_AS is not set -+# CONFIG_IOSCHED_DEADLINE is not set -+# CONFIG_IOSCHED_CFQ is not set -+CONFIG_CC_OPTIMIZE_FOR_SIZE=y -+ -+# -+# Loadable module support -+# -+CONFIG_MODULES=y -+CONFIG_MODULE_UNLOAD=y -+# CONFIG_MODULE_FORCE_UNLOAD is not set -+CONFIG_OBSOLETE_MODPARM=y -+# CONFIG_MODVERSIONS is not set -+CONFIG_KMOD=y -+ -+# -+# System Type -+# -+# CONFIG_ARCH_CLPS7500 is not set -+# CONFIG_ARCH_CLPS711X is not set -+# CONFIG_ARCH_CO285 is not set -+# CONFIG_ARCH_EBSA110 is not set -+# CONFIG_ARCH_CAMELOT is not set -+# CONFIG_ARCH_FOOTBRIDGE is not set -+# CONFIG_ARCH_INTEGRATOR is not set -+# CONFIG_ARCH_IOP3XX is not set -+# CONFIG_ARCH_IXP4XX is not set -+# CONFIG_ARCH_L7200 is not set -+CONFIG_ARCH_PXA=y -+# CONFIG_ARCH_RPC is not set -+# CONFIG_ARCH_SA1100 is not set -+# CONFIG_ARCH_S3C2410 is not set -+# CONFIG_ARCH_SHARK is not set -+# CONFIG_ARCH_LH7A40X is not set -+# CONFIG_ARCH_OMAP is not set -+# CONFIG_ARCH_VERSATILE_PB is not set -+# CONFIG_ARCH_IMX is not set -+ -+# -+# Intel PXA2xx Implementations -+# -+CONFIG_ARCH_GUMSTIX=y -+# CONFIG_ARCH_LUBBOCK is not set -+# CONFIG_MACH_MAINSTONE is not set -+# CONFIG_ARCH_PXA_IDP is not set -+# CONFIG_ARCH_GUMSTIX_ORIG is not set -+CONFIG_ARCH_GUMSTIX_F=y -+CONFIG_PXA25x=y -+ -+# -+# Processor Type -+# -+CONFIG_CPU_32=y -+CONFIG_CPU_XSCALE=y -+CONFIG_CPU_32v5=y -+CONFIG_CPU_ABRT_EV5T=y -+CONFIG_CPU_TLB_V4WBI=y -+CONFIG_CPU_MINICACHE=y -+ -+# -+# Processor Features -+# -+# CONFIG_ARM_THUMB is not set -+CONFIG_XSCALE_PMU=y -+ -+# -+# General setup -+# -+# CONFIG_ZBOOT_ROM is not set -+CONFIG_ZBOOT_ROM_TEXT=0x0 -+CONFIG_ZBOOT_ROM_BSS=0x0 -+CONFIG_CPU_FREQ=y -+CONFIG_CPU_FREQ_TABLE=y -+CONFIG_CPU_FREQ_PXA=y -+# CONFIG_CPU_FREQ_PROC_INTF is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y -+CONFIG_CPU_FREQ_GOV_PERFORMANCE=m -+CONFIG_CPU_FREQ_GOV_POWERSAVE=m -+CONFIG_CPU_FREQ_GOV_USERSPACE=y -+CONFIG_PROC_GPIO=m -+ -+# -+# PCMCIA/CardBus support -+# -+CONFIG_PCMCIA=m -+# CONFIG_PCMCIA_DEBUG is not set -+# CONFIG_TCIC is not set -+CONFIG_PCMCIA_PXA2XX=m -+ -+# -+# At least one math emulation must be selected -+# -+CONFIG_FPE_NWFPE=y -+# CONFIG_FPE_NWFPE_XP is not set -+# CONFIG_FPE_FASTFPE is not set -+# CONFIG_VFP is not set -+CONFIG_BINFMT_ELF=y -+# CONFIG_BINFMT_AOUT is not set -+# CONFIG_BINFMT_MISC is not set -+ -+# -+# Generic Driver Options -+# -+CONFIG_STANDALONE=y -+CONFIG_PREVENT_FIRMWARE_BUILD=y -+# CONFIG_FW_LOADER is not set -+# CONFIG_PM is not set -+# CONFIG_PREEMPT is not set -+# CONFIG_ARTHUR is not set -+CONFIG_CMDLINE="console=ttyS0,115200n8 root=1f02 rootfstype=jffs2 reboot=cold,hard" -+CONFIG_ALIGNMENT_TRAP=y -+ -+# -+# Parallel port support -+# -+# CONFIG_PARPORT is not set -+ -+# -+# Memory Technology Devices (MTD) -+# -+CONFIG_MTD=y -+# CONFIG_MTD_DEBUG is not set -+CONFIG_MTD_PARTITIONS=y -+# CONFIG_MTD_CONCAT is not set -+# CONFIG_MTD_REDBOOT_PARTS is not set -+# CONFIG_MTD_CMDLINE_PARTS is not set -+# CONFIG_MTD_AFS_PARTS is not set -+ -+# -+# User Modules And Translation Layers -+# -+CONFIG_MTD_CHAR=y -+CONFIG_MTD_BLOCK=y -+# CONFIG_FTL is not set -+# CONFIG_NFTL is not set -+# CONFIG_INFTL is not set -+ -+# -+# RAM/ROM/Flash chip drivers -+# -+CONFIG_MTD_CFI=y -+# CONFIG_MTD_JEDECPROBE is not set -+CONFIG_MTD_GEN_PROBE=y -+CONFIG_MTD_CFI_ADV_OPTIONS=y -+CONFIG_MTD_CFI_NOSWAP=y -+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -+CONFIG_MTD_CFI_GEOMETRY=y -+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set -+CONFIG_MTD_MAP_BANK_WIDTH_2=y -+# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set -+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -+CONFIG_MTD_CFI_I1=y -+# CONFIG_MTD_CFI_I2 is not set -+# CONFIG_MTD_CFI_I4 is not set -+# CONFIG_MTD_CFI_I8 is not set -+CONFIG_MTD_CFI_INTELEXT=y -+# CONFIG_MTD_CFI_AMDSTD is not set -+# CONFIG_MTD_CFI_STAA is not set -+CONFIG_MTD_CFI_UTIL=y -+# CONFIG_MTD_RAM is not set -+# CONFIG_MTD_ROM is not set -+# CONFIG_MTD_ABSENT is not set -+ -+# -+# Mapping drivers for chip access -+# -+CONFIG_MTD_COMPLEX_MAPPINGS=y -+CONFIG_MTD_PHYSMAP=y -+CONFIG_MTD_PHYSMAP_START=0x00000000 -+CONFIG_MTD_PHYSMAP_LEN=0x00400000 -+CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -+CONFIG_MTD_GUMSTIX=y -+# CONFIG_MTD_ARM_INTEGRATOR is not set -+# CONFIG_MTD_EDB7312 is not set -+ -+# -+# Self-contained MTD device drivers -+# -+# CONFIG_MTD_SLRAM is not set -+# CONFIG_MTD_PHRAM is not set -+# CONFIG_MTD_MTDRAM is not set -+# CONFIG_MTD_BLKMTD is not set -+ -+# -+# Disk-On-Chip Device Drivers -+# -+# CONFIG_MTD_DOC2000 is not set -+# CONFIG_MTD_DOC2001 is not set -+# CONFIG_MTD_DOC2001PLUS is not set -+ -+# -+# NAND Flash Device Drivers -+# -+# CONFIG_MTD_NAND is not set -+ -+# -+# Plug and Play support -+# -+ -+# -+# Block devices -+# -+# CONFIG_BLK_DEV_FD is not set -+CONFIG_BLK_DEV_LOOP=m -+# CONFIG_BLK_DEV_CRYPTOLOOP is not set -+# CONFIG_BLK_DEV_NBD is not set -+# CONFIG_BLK_DEV_RAM is not set -+ -+# -+# Multi-device support (RAID and LVM) -+# -+# CONFIG_MD is not set -+ -+# -+# Networking support -+# -+CONFIG_NET=y -+ -+# -+# Networking options -+# -+CONFIG_PACKET=m -+CONFIG_PACKET_MMAP=y -+# CONFIG_NETLINK_DEV is not set -+CONFIG_UNIX=m -+# CONFIG_NET_KEY is not set -+CONFIG_INET=y -+# CONFIG_IP_MULTICAST is not set -+# CONFIG_IP_ADVANCED_ROUTER is not set -+# CONFIG_IP_PNP is not set -+# CONFIG_NET_IPIP is not set -+# CONFIG_NET_IPGRE is not set -+# CONFIG_ARPD is not set -+# CONFIG_SYN_COOKIES is not set -+# CONFIG_INET_AH is not set -+# CONFIG_INET_ESP is not set -+# CONFIG_INET_IPCOMP is not set -+# CONFIG_INET_TUNNEL is not set -+# CONFIG_IPV6 is not set -+# CONFIG_NETFILTER is not set -+ -+# -+# SCTP Configuration (EXPERIMENTAL) -+# -+# CONFIG_IP_SCTP is not set -+# CONFIG_ATM is not set -+# CONFIG_BRIDGE is not set -+# CONFIG_VLAN_8021Q is not set -+# CONFIG_DECNET is not set -+# CONFIG_LLC2 is not set -+# CONFIG_IPX is not set -+# CONFIG_ATALK is not set -+# CONFIG_X25 is not set -+# CONFIG_LAPB is not set -+# CONFIG_NET_DIVERT is not set -+# CONFIG_ECONET is not set -+# CONFIG_WAN_ROUTER is not set -+# CONFIG_NET_HW_FLOWCONTROL is not set -+ -+# -+# QoS and/or fair queueing -+# -+# CONFIG_NET_SCHED is not set -+# CONFIG_NET_CLS_ROUTE is not set -+ -+# -+# Network testing -+# -+# CONFIG_NET_PKTGEN is not set -+# CONFIG_NETPOLL is not set -+# CONFIG_NET_POLL_CONTROLLER is not set -+# CONFIG_HAMRADIO is not set -+# CONFIG_IRDA is not set -+CONFIG_BT=m -+CONFIG_BT_GUMSTIX=m -+CONFIG_BT_L2CAP=m -+CONFIG_BT_SCO=m -+CONFIG_BT_RFCOMM=m -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=m -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=m -+ -+# -+# Bluetooth device drivers -+# -+CONFIG_BT_HCIUART=m -+CONFIG_BT_HCIUART_H4=y -+# CONFIG_BT_HCIUART_BCSP is not set -+# CONFIG_BT_HCIDTL1 is not set -+# CONFIG_BT_HCIBT3C is not set -+# CONFIG_BT_HCIBLUECARD is not set -+# CONFIG_BT_HCIBTUART is not set -+CONFIG_BT_HCIVHCI=m -+CONFIG_NETDEVICES=y -+# CONFIG_DUMMY is not set -+# CONFIG_BONDING is not set -+# CONFIG_EQUALIZER is not set -+# CONFIG_TUN is not set -+ -+# -+# Ethernet (10 or 100Mbit) -+# -+CONFIG_NET_ETHERNET=y -+CONFIG_MII=m -+CONFIG_SMC91X=m -+CONFIG_SMC91X_GUMSTIX=m -+ -+# -+# Ethernet (1000 Mbit) -+# -+ -+# -+# Ethernet (10000 Mbit) -+# -+ -+# -+# Token Ring devices -+# -+ -+# -+# Wireless LAN (non-hamradio) -+# -+# CONFIG_NET_RADIO is not set -+ -+# -+# PCMCIA network device support -+# -+# CONFIG_NET_PCMCIA is not set -+ -+# -+# Wan interfaces -+# -+# CONFIG_WAN is not set -+# CONFIG_PPP is not set -+# CONFIG_SLIP is not set -+# CONFIG_SHAPER is not set -+# CONFIG_NETCONSOLE is not set -+ -+# -+# ATA/ATAPI/MFM/RLL support -+# -+CONFIG_IDE=m -+CONFIG_BLK_DEV_IDE=m -+ -+# -+# Please see Documentation/ide.txt for help/info on IDE drives -+# -+# CONFIG_BLK_DEV_IDE_SATA is not set -+# CONFIG_BLK_DEV_IDEDISK is not set -+CONFIG_BLK_DEV_IDECS=m -+# CONFIG_BLK_DEV_IDECD is not set -+# CONFIG_BLK_DEV_IDETAPE is not set -+# CONFIG_BLK_DEV_IDEFLOPPY is not set -+# CONFIG_IDE_TASK_IOCTL is not set -+# CONFIG_IDE_TASKFILE_IO is not set -+ -+# -+# IDE chipset support/bugfixes -+# -+CONFIG_IDE_GENERIC=m -+# CONFIG_IDE_ARM is not set -+# CONFIG_BLK_DEV_IDEDMA is not set -+# CONFIG_IDEDMA_AUTO is not set -+# CONFIG_BLK_DEV_HD is not set -+ -+# -+# SCSI device support -+# -+# CONFIG_SCSI is not set -+ -+# -+# Fusion MPT device support -+# -+ -+# -+# IEEE 1394 (FireWire) support -+# -+ -+# -+# I2O device support -+# -+ -+# -+# ISDN subsystem -+# -+# CONFIG_ISDN is not set -+ -+# -+# Input device support -+# -+CONFIG_INPUT=m -+ -+# -+# Userland interfaces -+# -+# CONFIG_INPUT_MOUSEDEV is not set -+# CONFIG_INPUT_JOYDEV is not set -+# CONFIG_INPUT_TSDEV is not set -+# CONFIG_INPUT_EVDEV is not set -+# CONFIG_INPUT_EVBUG is not set -+ -+# -+# Input I/O drivers -+# -+# CONFIG_GAMEPORT is not set -+CONFIG_SOUND_GAMEPORT=y -+CONFIG_SERIO=y -+# CONFIG_SERIO_I8042 is not set -+# CONFIG_SERIO_SERPORT is not set -+# CONFIG_SERIO_CT82C710 is not set -+ -+# -+# Input Device Drivers -+# -+# CONFIG_INPUT_KEYBOARD is not set -+# CONFIG_INPUT_MOUSE is not set -+# CONFIG_INPUT_JOYSTICK is not set -+# CONFIG_INPUT_TOUCHSCREEN is not set -+# CONFIG_INPUT_MISC is not set -+ -+# -+# Character devices -+# -+# CONFIG_VT is not set -+# CONFIG_SERIAL_NONSTANDARD is not set -+ -+# -+# Serial drivers -+# -+# CONFIG_SERIAL_8250 is not set -+ -+# -+# Non-8250 serial port support -+# -+CONFIG_SERIAL_PXA=y -+CONFIG_SERIAL_PXA_CONSOLE=y -+CONFIG_SERIAL_CORE=y -+CONFIG_SERIAL_CORE_CONSOLE=y -+CONFIG_UNIX98_PTYS=y -+# CONFIG_LEGACY_PTYS is not set -+# CONFIG_QIC02_TAPE is not set -+ -+# -+# IPMI -+# -+# CONFIG_IPMI_HANDLER is not set -+ -+# -+# Watchdog Cards -+# -+CONFIG_WATCHDOG=y -+# CONFIG_WATCHDOG_NOWAYOUT is not set -+ -+# -+# Watchdog Device Drivers -+# -+# CONFIG_SOFT_WATCHDOG is not set -+CONFIG_SA1100_WATCHDOG=y -+# CONFIG_NVRAM is not set -+# CONFIG_RTC is not set -+# CONFIG_GEN_RTC is not set -+CONFIG_SA1100_RTC=m -+# CONFIG_DTLK is not set -+# CONFIG_R3964 is not set -+ -+# -+# Ftape, the floppy tape device driver -+# -+# CONFIG_AGP is not set -+# CONFIG_DRM is not set -+ -+# -+# PCMCIA character devices -+# -+# CONFIG_SYNCLINK_CS is not set -+# CONFIG_RAW_DRIVER is not set -+ -+# -+# I2C support -+# -+# CONFIG_I2C is not set -+ -+# -+# Multimedia devices -+# -+# CONFIG_VIDEO_DEV is not set -+ -+# -+# Digital Video Broadcasting Devices -+# -+# CONFIG_DVB is not set -+ -+# -+# File systems -+# -+# CONFIG_EXT2_FS is not set -+# CONFIG_EXT3_FS is not set -+# CONFIG_JBD is not set -+# CONFIG_REISERFS_FS is not set -+# CONFIG_JFS_FS is not set -+# CONFIG_XFS_FS is not set -+# CONFIG_MINIX_FS is not set -+# CONFIG_ROMFS_FS is not set -+# CONFIG_QUOTA is not set -+# CONFIG_AUTOFS_FS is not set -+# CONFIG_AUTOFS4_FS is not set -+ -+# -+# CD-ROM/DVD Filesystems -+# -+# CONFIG_ISO9660_FS is not set -+# CONFIG_UDF_FS is not set -+ -+# -+# DOS/FAT/NT Filesystems -+# -+CONFIG_FAT_FS=m -+CONFIG_MSDOS_FS=m -+CONFIG_VFAT_FS=m -+CONFIG_FAT_DEFAULT_CODEPAGE=437 -+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -+# CONFIG_NTFS_FS is not set -+ -+# -+# Pseudo filesystems -+# -+CONFIG_PROC_FS=y -+CONFIG_SYSFS=y -+# CONFIG_DEVFS_FS is not set -+# CONFIG_DEVPTS_FS_XATTR is not set -+CONFIG_TMPFS=y -+# CONFIG_HUGETLB_PAGE is not set -+CONFIG_RAMFS=y -+ -+# -+# Miscellaneous filesystems -+# -+# CONFIG_ADFS_FS is not set -+# CONFIG_AFFS_FS is not set -+# CONFIG_HFS_FS is not set -+# CONFIG_HFSPLUS_FS is not set -+# CONFIG_BEFS_FS is not set -+# CONFIG_BFS_FS is not set -+# CONFIG_EFS_FS is not set -+# CONFIG_JFFS_FS is not set -+CONFIG_JFFS2_FS=y -+CONFIG_JFFS2_FS_DEBUG=0 -+# CONFIG_JFFS2_FS_NAND is not set -+CONFIG_JFFS2_COMPRESSION_OPTIONS=y -+CONFIG_JFFS2_ZLIB=y -+CONFIG_JFFS2_RTIME=y -+CONFIG_JFFS2_RUBIN=y -+# CONFIG_JFFS2_CMODE_NONE is not set -+# CONFIG_JFFS2_CMODE_PRIORITY is not set -+CONFIG_JFFS2_CMODE_SIZE=y -+# CONFIG_CRAMFS is not set -+# CONFIG_VXFS_FS is not set -+# CONFIG_HPFS_FS is not set -+# CONFIG_QNX4FS_FS is not set -+# CONFIG_SYSV_FS is not set -+# CONFIG_UFS_FS is not set -+ -+# -+# Network File Systems -+# -+CONFIG_NFS_FS=m -+CONFIG_NFS_V3=y -+# CONFIG_NFS_V4 is not set -+# CONFIG_NFS_DIRECTIO is not set -+# CONFIG_NFSD is not set -+CONFIG_LOCKD=m -+CONFIG_LOCKD_V4=y -+# CONFIG_EXPORTFS is not set -+CONFIG_SUNRPC=m -+# CONFIG_RPCSEC_GSS_KRB5 is not set -+# CONFIG_RPCSEC_GSS_SPKM3 is not set -+# CONFIG_SMB_FS is not set -+# CONFIG_CIFS is not set -+# CONFIG_NCP_FS is not set -+# CONFIG_CODA_FS is not set -+# CONFIG_AFS_FS is not set -+ -+# -+# Partition Types -+# -+CONFIG_PARTITION_ADVANCED=y -+# CONFIG_ACORN_PARTITION is not set -+# CONFIG_OSF_PARTITION is not set -+# CONFIG_AMIGA_PARTITION is not set -+# CONFIG_ATARI_PARTITION is not set -+# CONFIG_MAC_PARTITION is not set -+CONFIG_MSDOS_PARTITION=y -+# CONFIG_BSD_DISKLABEL is not set -+# CONFIG_MINIX_SUBPARTITION is not set -+# CONFIG_SOLARIS_X86_PARTITION is not set -+# CONFIG_UNIXWARE_DISKLABEL is not set -+# CONFIG_LDM_PARTITION is not set -+# CONFIG_SGI_PARTITION is not set -+# CONFIG_ULTRIX_PARTITION is not set -+# CONFIG_SUN_PARTITION is not set -+# CONFIG_EFI_PARTITION is not set -+ -+# -+# Native Language Support -+# -+CONFIG_NLS=m -+CONFIG_NLS_DEFAULT="iso8859-1" -+CONFIG_NLS_CODEPAGE_437=m -+# CONFIG_NLS_CODEPAGE_737 is not set -+# CONFIG_NLS_CODEPAGE_775 is not set -+# CONFIG_NLS_CODEPAGE_850 is not set -+# CONFIG_NLS_CODEPAGE_852 is not set -+# CONFIG_NLS_CODEPAGE_855 is not set -+# CONFIG_NLS_CODEPAGE_857 is not set -+# CONFIG_NLS_CODEPAGE_860 is not set -+# CONFIG_NLS_CODEPAGE_861 is not set -+# CONFIG_NLS_CODEPAGE_862 is not set -+# CONFIG_NLS_CODEPAGE_863 is not set -+# CONFIG_NLS_CODEPAGE_864 is not set -+# CONFIG_NLS_CODEPAGE_865 is not set -+# CONFIG_NLS_CODEPAGE_866 is not set -+# CONFIG_NLS_CODEPAGE_869 is not set -+# CONFIG_NLS_CODEPAGE_936 is not set -+# CONFIG_NLS_CODEPAGE_950 is not set -+# CONFIG_NLS_CODEPAGE_932 is not set -+# CONFIG_NLS_CODEPAGE_949 is not set -+# CONFIG_NLS_CODEPAGE_874 is not set -+# CONFIG_NLS_ISO8859_8 is not set -+# CONFIG_NLS_CODEPAGE_1250 is not set -+# CONFIG_NLS_CODEPAGE_1251 is not set -+# CONFIG_NLS_ASCII is not set -+CONFIG_NLS_ISO8859_1=m -+# CONFIG_NLS_ISO8859_2 is not set -+# CONFIG_NLS_ISO8859_3 is not set -+# CONFIG_NLS_ISO8859_4 is not set -+# CONFIG_NLS_ISO8859_5 is not set -+# CONFIG_NLS_ISO8859_6 is not set -+# CONFIG_NLS_ISO8859_7 is not set -+# CONFIG_NLS_ISO8859_9 is not set -+# CONFIG_NLS_ISO8859_13 is not set -+# CONFIG_NLS_ISO8859_14 is not set -+# CONFIG_NLS_ISO8859_15 is not set -+# CONFIG_NLS_KOI8_R is not set -+# CONFIG_NLS_KOI8_U is not set -+# CONFIG_NLS_UTF8 is not set -+ -+# -+# Profiling support -+# -+# CONFIG_PROFILING is not set -+ -+# -+# Graphics support -+# -+# CONFIG_FB is not set -+ -+# -+# Sound -+# -+# CONFIG_SOUND is not set -+ -+# -+# Misc devices -+# -+ -+# -+# USB support -+# -+ -+# -+# USB Gadget Support -+# -+CONFIG_USB_GADGET=m -+CONFIG_USB_GADGET_GUMSTIX=m -+# CONFIG_USB_GADGET_NET2280 is not set -+CONFIG_USB_GADGET_PXA2XX=y -+CONFIG_USB_PXA2XX=m -+# CONFIG_USB_PXA2XX_SMALL is not set -+# CONFIG_USB_GADGET_GOKU is not set -+# CONFIG_USB_GADGET_SA1100 is not set -+# CONFIG_USB_GADGET_DUMMY_HCD is not set -+# CONFIG_USB_GADGET_DUALSPEED is not set -+# CONFIG_USB_ZERO is not set -+CONFIG_USB_ETH=m -+CONFIG_USB_ETH_RNDIS=y -+# CONFIG_USB_GADGETFS is not set -+# CONFIG_USB_FILE_STORAGE is not set -+# CONFIG_USB_G_SERIAL is not set -+ -+# -+# MMC/SD Card support -+# -+CONFIG_MMC=m -+# CONFIG_MMC_DEBUG is not set -+CONFIG_MMC_BLOCK=m -+CONFIG_MMC_PXA=m -+ -+# -+# Kernel hacking -+# -+# CONFIG_DEBUG_KERNEL is not set -+# CONFIG_DEBUG_INFO is not set -+CONFIG_FRAME_POINTER=y -+# CONFIG_DEBUG_USER is not set -+ -+# -+# Security options -+# -+# CONFIG_SECURITY is not set -+ -+# -+# Cryptographic options -+# -+# CONFIG_CRYPTO is not set -+ -+# -+# Library routines -+# -+# CONFIG_CRC_CCITT is not set -+CONFIG_CRC32=y -+# CONFIG_LIBCRC32C is not set -+CONFIG_ZLIB_INFLATE=y -+CONFIG_ZLIB_DEFLATE=y diff --git a/recipes/linux/linux-gumstix-2.6.15/disable-uncompress-message.patch b/recipes/linux/linux-gumstix-2.6.15/disable-uncompress-message.patch deleted file mode 100644 index 34399a9578..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/disable-uncompress-message.patch +++ /dev/null @@ -1,32 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/boot/compressed/misc.c -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/boot/compressed/misc.c -+++ linux-2.6.15gum/arch/arm/boot/compressed/misc.c -@@ -280,7 +280,6 @@ void flush_window(void) - bytes_out += (ulg)outcnt; - output_ptr += (ulg)outcnt; - outcnt = 0; -- putstr("."); - } - - #ifndef arch_error -@@ -312,9 +311,7 @@ decompress_kernel(ulg output_start, ulg - arch_decomp_setup(); - - makecrc(); -- putstr("Uncompressing Linux..."); - gunzip(); -- putstr(" done, booting the kernel.\n"); - return output_ptr; - } - #else -@@ -326,9 +323,7 @@ int main() - output_data = output_buffer; - - makecrc(); -- putstr("Uncompressing Linux..."); - gunzip(); -- putstr("done.\n"); - return 0; - } - #endif diff --git a/recipes/linux/linux-gumstix-2.6.15/ethernet-config.patch b/recipes/linux/linux-gumstix-2.6.15/ethernet-config.patch deleted file mode 100644 index 1e6ac5bbda..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/ethernet-config.patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: linux-2.6.15gum/drivers/net/smc91x.h -=================================================================== ---- linux-2.6.15gum.orig/drivers/net/smc91x.h -+++ linux-2.6.15gum/drivers/net/smc91x.h -@@ -55,6 +55,21 @@ - #define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) - #define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) - -+#elif defined(CONFIG_ARCH_GUMSTIX) -+#define SMC_CAN_USE_8BIT 0 -+#define SMC_CAN_USE_16BIT 1 -+#define SMC_CAN_USE_32BIT 0 -+#define SMC_NOWAIT 1 -+#define SMC_USE_PXA_DMA 1 -+#define SMC_IO_SHIFT 0 -+#define SMC_inw(a, r) readw((a) + (r)) -+#define SMC_outw(v, a, r) writew(v, (a) + (r)) -+#define SMC_insw(a, r, p, l) readsw((a) + (r), p, l) -+#define SMC_outsw(a, r, p, l) writesw((a) + (r), p, l) -+#define RPC_LSA_DEFAULT RPC_LED_100_10 -+#define RPC_LSB_DEFAULT RPC_LED_TX_RX -+ -+ - #elif defined(CONFIG_REDWOOD_5) || defined(CONFIG_REDWOOD_6) - - /* We can only do 16-bit reads and writes in the static memory space. */ diff --git a/recipes/linux/linux-gumstix-2.6.15/flash.patch b/recipes/linux/linux-gumstix-2.6.15/flash.patch deleted file mode 100644 index b0ec106770..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/flash.patch +++ /dev/null @@ -1,171 +0,0 @@ -Index: linux-2.6.15gum/drivers/mtd/maps/gumstix-flash.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/mtd/maps/gumstix-flash.c -@@ -0,0 +1,136 @@ -+/* -+ * Map driver for the Gumstix platform -+ * -+ * Author: Craig Hughes -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+#include <linux/module.h> -+#include <linux/types.h> -+#include <linux/kernel.h> -+#include <linux/init.h> -+#include <linux/mtd/mtd.h> -+#include <linux/mtd/map.h> -+#include <linux/mtd/partitions.h> -+#include <asm/io.h> -+#include <asm/hardware.h> -+#include <asm/arch/gumstix.h> -+ -+ -+#define ROM_ADDR 0x00000000 -+#define FLASH_ADDR 0x00000000 -+ -+#define WINDOW_SIZE 64*1024*1024 -+ -+static struct map_info gumstix_flash_maps[1] = { { -+ .name = "Gumstix Flash ROM", -+ .size = WINDOW_SIZE, -+ .phys = FLASH_ADDR, -+ .bankwidth = 2, -+} }; -+ -+static struct mtd_partition gumstix_flash_partitions[] = { -+ { -+ .name = "Bootloader", -+ .size = 0x00040000, -+ .offset = FLASH_ADDR -+ },{ -+ .name = "RootFS", -+ .size = MTDPART_SIZ_FULL, -+ .offset = MTDPART_OFS_APPEND -+ } -+}; -+ -+static struct mtd_info *mymtds[1]; -+static struct mtd_partition *parsed_parts[1]; -+static int nr_parsed_parts[1]; -+ -+static const char *probes[] = { NULL }; -+ -+static int __init gumstix_flashmap_init(void) -+{ -+ int ret = 0, i; -+ -+ for (i = 0; i < 1; i++) { -+ gumstix_flash_maps[i].virt = ioremap(gumstix_flash_maps[i].phys, WINDOW_SIZE); -+ if (!gumstix_flash_maps[i].virt) { -+ printk(KERN_WARNING "Failed to ioremap %s\n", gumstix_flash_maps[i].name); -+ if (!ret) -+ ret = -ENOMEM; -+ continue; -+ } -+ simple_map_init(&gumstix_flash_maps[i]); -+ -+ printk(KERN_NOTICE "Probing %s at physical address 0x%08lx (%d-bit bankwidth)\n", -+ gumstix_flash_maps[i].name, gumstix_flash_maps[i].phys, -+ gumstix_flash_maps[i].bankwidth * 8); -+ -+ mymtds[i] = do_map_probe("cfi_probe", &gumstix_flash_maps[i]); -+ -+ if (!mymtds[i]) { -+ iounmap((void *)gumstix_flash_maps[i].virt); -+ if (gumstix_flash_maps[i].cached) -+ iounmap(gumstix_flash_maps[i].cached); -+ if (!ret) -+ ret = -EIO; -+ continue; -+ } -+ mymtds[i]->owner = THIS_MODULE; -+ -+ ret = parse_mtd_partitions(mymtds[i], probes, -+ &parsed_parts[i], 0); -+ -+ if (ret > 0) -+ nr_parsed_parts[i] = ret; -+ } -+ -+ if (!mymtds[0]) -+ return ret; -+ -+ for (i = 0; i < 1; i++) { -+ if (!mymtds[i]) { -+ printk(KERN_WARNING "%s is absent. Skipping\n", gumstix_flash_maps[i].name); -+ } else if (nr_parsed_parts[i]) { -+ add_mtd_partitions(mymtds[i], parsed_parts[i], nr_parsed_parts[i]); -+ } else if (!i) { -+ printk("Using static partitions on %s\n", gumstix_flash_maps[i].name); -+ add_mtd_partitions(mymtds[i], gumstix_flash_partitions, ARRAY_SIZE(gumstix_flash_partitions)); -+ } else { -+ printk("Registering %s as whole device\n", gumstix_flash_maps[i].name); -+ add_mtd_device(mymtds[i]); -+ } -+ } -+ return 0; -+} -+ -+static void __exit gumstix_flashmap_cleanup(void) -+{ -+ int i; -+ for (i = 0; i < 1; i++) { -+ if (!mymtds[i]) -+ continue; -+ -+ if (nr_parsed_parts[i] || !i) -+ del_mtd_partitions(mymtds[i]); -+ else -+ del_mtd_device(mymtds[i]); -+ -+ map_destroy(mymtds[i]); -+ iounmap((void *)gumstix_flash_maps[i].virt); -+ if (gumstix_flash_maps[i].cached) -+ iounmap(gumstix_flash_maps[i].cached); -+ -+ if (parsed_parts[i]) -+ kfree(parsed_parts[i]); -+ } -+} -+ -+module_init(gumstix_flashmap_init); -+module_exit(gumstix_flashmap_cleanup); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Gumstix, Inc. <gumstix-users@lists.sf.net>"); -+MODULE_DESCRIPTION("MTD map driver for the Gumstix Platform"); -Index: linux-2.6.15gum/drivers/mtd/maps/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/mtd/maps/Kconfig -+++ linux-2.6.15gum/drivers/mtd/maps/Kconfig -@@ -208,6 +208,13 @@ config MTD_SBC_GXX - More info at - <http://www.arcomcontrols.com/products/icp/pc104/processors/SBC_GX1.htm>. - -+config MTD_GUMSTIX -+ tristate "CFI Flash device mapped on Gumstix" -+ depends on ARCH_GUMSTIX && MTD_CFI_INTELEXT && MTD_PARTITIONS -+ help -+ This provides a driver for the on-board flash of the Gumstix -+ single board computers. -+ - config MTD_PXA2XX - tristate "CFI Flash device mapped on Intel XScale PXA2xx eval board" - depends on (ARCH_LUBBOCK || MACH_MAINSTONE) && MTD_CFI_INTELEXT -Index: linux-2.6.15gum/drivers/mtd/maps/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/mtd/maps/Makefile -+++ linux-2.6.15gum/drivers/mtd/maps/Makefile -@@ -22,6 +22,7 @@ obj-$(CONFIG_MTD_AMD76XROM) += amd76xrom - obj-$(CONFIG_MTD_ICHXROM) += ichxrom.o - obj-$(CONFIG_MTD_TSUNAMI) += tsunami_flash.o - obj-$(CONFIG_MTD_PXA2XX) += pxa2xx-flash.o -+obj-$(CONFIG_MTD_GUMSTIX) += gumstix-flash.o - obj-$(CONFIG_MTD_MBX860) += mbx860.o - obj-$(CONFIG_MTD_CEIVA) += ceiva.o - obj-$(CONFIG_MTD_OCTAGON) += octagon-5066.o diff --git a/recipes/linux/linux-gumstix-2.6.15/gumstix-mmc.patch b/recipes/linux/linux-gumstix-2.6.15/gumstix-mmc.patch deleted file mode 100644 index e526712091..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/gumstix-mmc.patch +++ /dev/null @@ -1,91 +0,0 @@ -diff -udrp linux-2.6.15/arch/arm/mach-pxa/gumstix.c linux-2.6.15.mine/arch/arm/mach-pxa/gumstix.c ---- linux-2.6.15/arch/arm/mach-pxa/gumstix.c 2006-04-11 00:29:42.000000000 -0400 -+++ linux-2.6.15.mine/arch/arm/mach-pxa/gumstix.c 2006-04-11 00:11:38.000000000 -0400 -@@ -28,19 +28,60 @@ - - #include "generic.h" - --static int gumstix_mci_init(struct device *dev, irqreturn_t (*lubbock_detect_int)(int, void *, struct pt_regs *), void *data) -+static struct pxamci_platform_data gumstix_mci_platform_data; -+ -+static int gumstix_mci_init(struct device *dev, irqreturn_t (*gumstix_detect_int)(int, void *, struct pt_regs *), void *data) - { -- // Set up MMC controller -+ int err; -+ -+ //printk("entering gumstix_mci_init\n"); -+ - pxa_gpio_mode(GPIO6_MMCCLK_MD); - pxa_gpio_mode(GPIO53_MMCCLK_MD); - pxa_gpio_mode(GPIO8_MMCCS0_MD); - -+ //printk(" setting gpio sd detect\n"); -+ pxa_gpio_mode(GUMSTIX_GPIO_nSD_DETECT | GPIO_IN); -+ pxa_gpio_mode(GUMSTIX_GPIO_nSD_WP | GPIO_IN); -+ -+ //printk(" setting delay to "); -+ gumstix_mci_platform_data.detect_delay = msecs_to_jiffies(200); -+ //printk("%d\n", gumstix_mci_platform_data.detect_delay); -+ -+ err = request_irq(GUMSTIX_IRQ_GPIO_nSD_DETECT, gumstix_detect_int, SA_INTERRUPT, -+ "MMC card detect", data); -+ if (err) { -+ printk(KERN_ERR "gumstix_mci_init: MMC/SD: can't request MMC card detect IRQ\n"); -+ return -1; -+ } -+ -+ //printk(" set_irq_type returned a "); -+ err = set_irq_type(GUMSTIX_IRQ_GPIO_nSD_DETECT, IRQT_BOTHEDGE); -+ //printk("%d\n", err); -+ - return 0; - } - -+static int gumstix_mci_get_ro(struct device *dev) -+{ -+ int ro; -+ //printk("entering gumstix_mci_get_ro\n"); -+ ro = GPLR(GUMSTIX_GPIO_nSD_WP) & GPIO_bit(GUMSTIX_GPIO_nSD_WP); -+ //printk(" ro is %d\n", ro); -+ return ro; -+} -+ -+static void gumstix_mci_exit(struct device *dev, void *data) -+{ -+ //printk("entering gumstix_mci_exit\n"); -+ free_irq(GUMSTIX_IRQ_GPIO_nSD_DETECT, data); -+} -+ - static struct pxamci_platform_data gumstix_mci_platform_data = { - .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34, -- .init = &gumstix_mci_init, -+ .init = gumstix_mci_init, -+ .get_ro = gumstix_mci_get_ro, -+ .exit = gumstix_mci_exit, - }; - - static int gumstix_udc_is_connected(void) -@@ -76,6 +117,7 @@ static struct platform_device *devices[] - - static void __init gumstix_init(void) - { -+ //printk("entering gumstix_init\n"); - pxa_set_mci_info(&gumstix_mci_platform_data); - pxa_set_udc_info(&gumstix_udc_info); - (void) platform_add_devices(devices, ARRAY_SIZE(devices)); -diff -udrp linux-2.6.15/include/asm-arm/arch-pxa/gumstix.h linux-2.6.15.mine/include/asm-arm/arch-pxa/gumstix.h ---- linux-2.6.15/include/asm-arm/arch-pxa/gumstix.h 2006-04-11 00:29:43.000000000 -0400 -+++ linux-2.6.15.mine/include/asm-arm/arch-pxa/gumstix.h 2006-04-10 22:26:20.000000000 -0400 -@@ -36,6 +36,12 @@ - #define GPIO_GUMSTIX_USB_GPIOx_CON_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_OUT) - #define GPIO_GUMSTIX_USB_GPIOx_DIS_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_IN) - -+/* -+ * SD/MMC definitions -+ */ -+#define GUMSTIX_GPIO_nSD_WP (22) /* SD Write Protect? */ -+#define GUMSTIX_GPIO_nSD_DETECT (11) /* MMC/SD Card Detect */ -+#define GUMSTIX_IRQ_GPIO_nSD_DETECT IRQ_GPIO(11) - - /* - * SMC Ethernet definitions diff --git a/recipes/linux/linux-gumstix-2.6.15/header.patch b/recipes/linux/linux-gumstix-2.6.15/header.patch deleted file mode 100644 index 51cfa08cc6..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/header.patch +++ /dev/null @@ -1,87 +0,0 @@ -Index: linux-2.6.15gum/include/asm-arm/arch-pxa/gumstix.h -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/include/asm-arm/arch-pxa/gumstix.h -@@ -0,0 +1,82 @@ -+/* -+ * linux/include/asm-arm/arch-pxa/gumstix.h -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+ -+/* BTRESET - Reset line to Bluetooth module, active low signal. */ -+#define GPIO_GUMSTIX_BTRESET 7 -+#define GPIO_GUMSTIX_BTRESET_MD (GPIO_GUMSTIX_BTRESET | GPIO_OUT) -+ -+ -+/* GPIOn - Input from MAX823 (or equiv), normalizing USB +5V -+ into a clean interrupt signal for determining cable presence -+ On the original gumstix, this is GPIO81, and GPIO83 needs to be defined as well. -+ On the gumstix F, this moves to GPIO17 and GPIO37 */ -+/* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn -+ has detected a cable insertion; driven low otherwise. */ -+ -+#ifdef CONFIG_ARCH_GUMSTIX_ORIG -+ -+#define GPIO_GUMSTIX_USB_GPIOn 81 -+#define GPIO_GUMSTIX_USB_GPIOx 83 -+ -+#else -+ -+#define GPIO_GUMSTIX_USB_GPIOn 35 -+#define GPIO_GUMSTIX_USB_GPIOx 41 -+ -+#endif -+ -+#define GUMSTIX_USB_INTR_IRQ IRQ_GPIO(GPIO_GUMSTIX_USB_GPIOn) /* usb state change */ -+#define GPIO_GUMSTIX_USB_GPIOn_MD (GPIO_GUMSTIX_USB_GPIOn | GPIO_IN) -+#define GPIO_GUMSTIX_USB_GPIOx_CON_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_OUT) -+#define GPIO_GUMSTIX_USB_GPIOx_DIS_MD (GPIO_GUMSTIX_USB_GPIOx | GPIO_IN) -+ -+ -+/* -+ * SMC Ethernet definitions -+ * ETH_RST provides a hardware reset line to the ethernet chip -+ * ETH is the IRQ line in from the ethernet chip to the PXA -+ */ -+#define GPIO_GUMSTIX_ETH0_RST 80 -+#define GPIO_GUMSTIX_ETH0_RST_MD (GPIO_GUMSTIX_ETH0_RST | GPIO_OUT) -+#define GPIO_GUMSTIX_ETH1_RST 52 -+#define GPIO_GUMSTIX_ETH1_RST_MD (GPIO_GUMSTIX_ETH1_RST | GPIO_OUT) -+ -+#define GPIO_GUMSTIX_ETH0 36 -+#define GPIO_GUMSTIX_ETH0_MD (GPIO_GUMSTIX_ETH0 | GPIO_IN) -+#define GUMSTIX_ETH0_IRQ IRQ_GPIO(GPIO_GUMSTIX_ETH0) -+#define GPIO_GUMSTIX_ETH1 27 -+#define GPIO_GUMSTIX_ETH1_MD (GPIO_GUMSTIX_ETH1 | GPIO_IN) -+#define GUMSTIX_ETH1_IRQ IRQ_GPIO(GPIO_GUMSTIX_ETH1) -+ -+ -+/* -+ * The following are missing from pxa-regs.h -+ */ -+ -+#define GPIO4_nBVD1 4 -+#define GPIO4_nSTSCHG GPIO4_nBVD1 -+#define GPIO8_RESET 8 -+#define GPIO11_nPCD1 11 -+#define GPIO22_nINPACK 22 -+#define GPIO26_PRDY_nBSY0 26 -+#define GPIO36_nBVD2 36 -+ -+#define GPIO4_nBVD1_MD ( GPIO4_nBVD1| GPIO_IN ) -+#define GPIO4_nSTSCHG_MD ( GPIO4_nSTSCHG | GPIO_IN ) -+#define GPIO8_RESET_MD ( GPIO8_RESET | GPIO_OUT ) -+#define GPIO11_nPCD1_MD ( GPIO11_nPCD1 | GPIO_IN ) -+#define GPIO22_nINPACK_MD ( GPIO22_nINPACK | GPIO_IN ) -+#define GPIO26_PRDY_nBSY0_MD ( GPIO26_PRDY_nBSY0 | GPIO_IN ) -+#define GPIO36_nBVD2_MD ( GPIO36_nBVD2 | GPIO_IN ) -+ -+#define GUMSTIX_nSTSCHG_IRQ IRQ_GPIO(GPIO4_nSTSCHG) -+#define GUMSTIX_nPCD1_IRQ IRQ_GPIO(GPIO11_nPCD1) -+#define GUSMTIX_nBVD1_IRQ IRQ_GPIO(GPIO4_nBVD1) -+#define GUMSTIX_nBVD2_IRQ IRQ_GPIO(GPIO36_nBVD2) -+#define GUMSTIX_PRDY_nBSY0_IRQ IRQ_GPIO(GPIO26_PRDY_nBSY0) diff --git a/recipes/linux/linux-gumstix-2.6.15/i2c-gpl-module-fix.patch b/recipes/linux/linux-gumstix-2.6.15/i2c-gpl-module-fix.patch deleted file mode 100644 index 408bb1854d..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/i2c-gpl-module-fix.patch +++ /dev/null @@ -1,43 +0,0 @@ -Index: linux-2.6.15gum/drivers/i2c/busses/i2c-pxa.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/i2c/busses/i2c-pxa.c -+++ linux-2.6.15gum/drivers/i2c/busses/i2c-pxa.c -@@ -32,7 +32,6 @@ - #include <linux/i2c-pxa.h> - #include <linux/platform_device.h> - --#include <asm/arch/pxa-regs.h> - #include <asm/hardware.h> - #include <asm/irq.h> - #include <asm/arch/i2c.h> -@@ -900,6 +899,12 @@ static int i2c_pxa_xfer(struct i2c_adapt - struct pxa_i2c *i2c = adap->algo_data; - int ret, i; - -+ /* If the I2C controller is disabled we need to reset it (probably due -+ to a suspend/resume destroying state). We do this here as we can then -+ avoid worrying about resuming the controller before its users. */ -+ if (!(ICR & ICR_IUE)) -+ i2c_pxa_reset(i2c); -+ - for (i = adap->retries; i >= 0; i--) { - ret = i2c_pxa_do_xfer(i2c, msgs, num); - if (ret != I2C_RETRY) -@@ -940,7 +945,9 @@ static struct pxa_i2c i2c_pxa = { - static int i2c_pxa_probe(struct platform_device *dev) - { - struct pxa_i2c *i2c = &i2c_pxa; -+#ifdef CONFIG_I2C_PXA_SLAVE - struct i2c_pxa_platform_data *plat = dev->dev.platform_data; -+#endif - int ret; - - #ifdef CONFIG_PXA27x -@@ -1025,5 +1032,7 @@ static void i2c_adap_pxa_exit(void) - return platform_driver_unregister(&i2c_pxa_driver); - } - -+MODULE_LICENSE("GPL"); -+ - module_init(i2c_adap_pxa_init); - module_exit(i2c_adap_pxa_exit); diff --git a/recipes/linux/linux-gumstix-2.6.15/kconfig-arch-cleanup.patch b/recipes/linux/linux-gumstix-2.6.15/kconfig-arch-cleanup.patch deleted file mode 100644 index 1d35bfa805..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/kconfig-arch-cleanup.patch +++ /dev/null @@ -1,72 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/mach-clps711x/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-clps711x/Kconfig -+++ linux-2.6.15gum/arch/arm/mach-clps711x/Kconfig -@@ -1,6 +1,7 @@ - if ARCH_CLPS711X - - menu "CLPS711X/EP721X Implementations" -+ depends on ARCH_CLPS711X - - config ARCH_AUTCPU12 - bool "AUTCPU12" -Index: linux-2.6.15gum/arch/arm/mach-epxa10db/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-epxa10db/Kconfig -+++ linux-2.6.15gum/arch/arm/mach-epxa10db/Kconfig -@@ -1,6 +1,7 @@ - if ARCH_CAMELOT - - menu "Epxa10db" -+ depends on ARCH_CAMELOT - - comment "PLD hotswap support" - -Index: linux-2.6.15gum/arch/arm/mach-footbridge/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-footbridge/Kconfig -+++ linux-2.6.15gum/arch/arm/mach-footbridge/Kconfig -@@ -1,6 +1,7 @@ - if ARCH_FOOTBRIDGE - - menu "Footbridge Implementations" -+ depends on ARCH_FOOTBRIDGE - - config ARCH_CATS - bool "CATS" -Index: linux-2.6.15gum/arch/arm/mach-iop3xx/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-iop3xx/Kconfig -+++ linux-2.6.15gum/arch/arm/mach-iop3xx/Kconfig -@@ -1,6 +1,7 @@ - if ARCH_IOP3XX - - menu "IOP3xx Implementation Options" -+ depends on ARCH_IOP3XX - - comment "IOP3xx Platform Types" - -Index: linux-2.6.15gum/arch/arm/mach-lh7a40x/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-lh7a40x/Kconfig -+++ linux-2.6.15gum/arch/arm/mach-lh7a40x/Kconfig -@@ -1,6 +1,7 @@ - if ARCH_LH7A40X - - menu "LH7A40X Implementations" -+ depends on ARCH_LH7A40X - - config MACH_KEV7A400 - bool "KEV7A400" -Index: linux-2.6.15gum/arch/arm/mach-sa1100/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/mach-sa1100/Kconfig -+++ linux-2.6.15gum/arch/arm/mach-sa1100/Kconfig -@@ -1,6 +1,7 @@ - if ARCH_SA1100 - - menu "SA11x0 Implementations" -+ depends on ARCH_SA1100 - - config SA1100_ASSABET - bool "Assabet" diff --git a/recipes/linux/linux-gumstix-2.6.15/kernel-osx.patch b/recipes/linux/linux-gumstix-2.6.15/kernel-osx.patch deleted file mode 100644 index b50001db57..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/kernel-osx.patch +++ /dev/null @@ -1,50 +0,0 @@ -Index: linux-2.6.15gum/scripts/Makefile.host -=================================================================== ---- linux-2.6.15gum.orig/scripts/Makefile.host -+++ linux-2.6.15gum/scripts/Makefile.host -@@ -137,15 +137,17 @@ $(host-cxxobjs): %.o: %.cc FORCE - - # Compile .c file, create position independent .o file - # host-cshobjs -> .o --quiet_cmd_host-cshobjs = HOSTCC -fPIC $@ -- cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $< -+quiet_cmd_host-cshobjs = HOSTCC -fPIC -fno-common $@ -+ cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -fno-common -c -o $@ $< - $(host-cshobjs): %.o: %.c FORCE - $(call if_changed_dep,host-cshobjs) - - # Link a shared library, based on position independent .o files - # *.o -> .so shared library (host-cshlib) --quiet_cmd_host-cshlib = HOSTLLD -shared $@ -- cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \ -+SHARED_SWITCH = `if $(HOSTCC) -dM -E - < /dev/null | grep -q APPLE; \ -+ then echo "-dynamiclib"; else echo "-shared"; fi` -+quiet_cmd_host-cshlib = HOSTLLD $(SHARED_SWITCH) $@ -+ cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) $(SHARED_SWITCH) -o $@ \ - $(addprefix $(obj)/,$($(@F:.so=-objs))) \ - $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F)) - $(host-cshlib): %: $(host-cshobjs) FORCE -Index: linux-2.6.15gum/Makefile -=================================================================== ---- linux-2.6.15gum.orig/Makefile -+++ linux-2.6.15gum/Makefile -@@ -203,7 +203,8 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" - - HOSTCC = gcc - HOSTCXX = g++ --HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -+HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -idirafter "`$(CC) -print-file-name=include`/../../../../../include/" -+ - HOSTCXXFLAGS = -O2 - - # Decide whether to build built-in, modular, or both. -Index: linux-2.6.15gum/scripts/mod/sumversion.c -=================================================================== ---- linux-2.6.15gum.orig/scripts/mod/sumversion.c -+++ linux-2.6.15gum/scripts/mod/sumversion.c -@@ -1,4 +1,4 @@ --#include <netinet/in.h> -+#include <arpa/inet.h> - #ifdef __sun__ - #include <inttypes.h> - #else diff --git a/recipes/linux/linux-gumstix-2.6.15/kobject_get_path_export.patch b/recipes/linux/linux-gumstix-2.6.15/kobject_get_path_export.patch deleted file mode 100644 index e54351155a..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/kobject_get_path_export.patch +++ /dev/null @@ -1,13 +0,0 @@ -Oddly, devices/input/input.c seems to reference a symbol which is in another module but is not exported. -Index: linux-2.6.15gum/lib/kobject.c -=================================================================== ---- linux-2.6.15gum.orig/lib/kobject.c -+++ linux-2.6.15gum/lib/kobject.c -@@ -115,6 +115,7 @@ char *kobject_get_path(struct kobject *k - - return path; - } -+EXPORT_SYMBOL(kobject_get_path); - - /** - * kobject_init - initialize object. diff --git a/recipes/linux/linux-gumstix-2.6.15/mach-types-fix.patch b/recipes/linux/linux-gumstix-2.6.15/mach-types-fix.patch deleted file mode 100644 index a74edf0bf6..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/mach-types-fix.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/tools/mach-types -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/tools/mach-types -+++ linux-2.6.15gum/arch/arm/tools/mach-types -@@ -387,7 +387,7 @@ s5c7375 ARCH_S5C7375 S5C7375 369 - spearhead ARCH_SPEARHEAD SPEARHEAD 370 - pantera ARCH_PANTERA PANTERA 371 - prayoglite ARCH_PRAYOGLITE PRAYOGLITE 372 --gumstix ARCH_GUMSTIK GUMSTIK 373 -+gumstix ARCH_GUMSTIX GUMSTIX 373 - rcube ARCH_RCUBE RCUBE 374 - rea_olv ARCH_REA_OLV REA_OLV 375 - pxa_iphone ARCH_PXA_IPHONE PXA_IPHONE 376 diff --git a/recipes/linux/linux-gumstix-2.6.15/mmc-version4.patch b/recipes/linux/linux-gumstix-2.6.15/mmc-version4.patch deleted file mode 100644 index c572dbcc2a..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/mmc-version4.patch +++ /dev/null @@ -1,12 +0,0 @@ -Index: linux-2.6.15gum/drivers/mmc/mmc.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/mmc/mmc.c -+++ linux-2.6.15gum/drivers/mmc/mmc.c -@@ -495,6 +495,7 @@ static void mmc_decode_cid(struct mmc_ca - - case 2: /* MMC v2.0 - v2.2 */ - case 3: /* MMC v3.1 - v3.3 */ -+ case 4: /* MMC v4.x */ - card->cid.manfid = UNSTUFF_BITS(resp, 120, 8); - card->cid.oemid = UNSTUFF_BITS(resp, 104, 16); - card->cid.prod_name[0] = UNSTUFF_BITS(resp, 96, 8); diff --git a/recipes/linux/linux-gumstix-2.6.15/modular-init-bluetooth.patch b/recipes/linux/linux-gumstix-2.6.15/modular-init-bluetooth.patch deleted file mode 100644 index c5d96f87d9..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/modular-init-bluetooth.patch +++ /dev/null @@ -1,106 +0,0 @@ -Index: linux-2.6.15gum/net/bluetooth/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/net/bluetooth/Kconfig -+++ linux-2.6.15gum/net/bluetooth/Kconfig -@@ -30,6 +30,12 @@ menuconfig BT - Bluetooth kernel modules are provided in the BlueZ packages. - For more information, see <http://www.bluez.org/>. - -+config BT_GUMSTIX -+ tristate -+ default m if BT=m -+ default y if BT=y -+ depends on BT && ARCH_GUMSTIX -+ - config BT_L2CAP - tristate "L2CAP protocol support" - depends on BT -Index: linux-2.6.15gum/net/bluetooth/Makefile -=================================================================== ---- linux-2.6.15gum.orig/net/bluetooth/Makefile -+++ linux-2.6.15gum/net/bluetooth/Makefile -@@ -9,5 +9,6 @@ obj-$(CONFIG_BT_RFCOMM) += rfcomm/ - obj-$(CONFIG_BT_BNEP) += bnep/ - obj-$(CONFIG_BT_CMTP) += cmtp/ - obj-$(CONFIG_BT_HIDP) += hidp/ -+obj-$(CONFIG_BT_GUMSTIX)+= gumstix_bluetooth.o - - bluetooth-objs := af_bluetooth.o hci_core.o hci_conn.o hci_event.o hci_sock.o hci_sysfs.o lib.o -Index: linux-2.6.15gum/net/bluetooth/af_bluetooth.c -=================================================================== ---- linux-2.6.15gum.orig/net/bluetooth/af_bluetooth.c -+++ linux-2.6.15gum/net/bluetooth/af_bluetooth.c -@@ -304,10 +304,18 @@ static struct net_proto_family bt_sock_f - .create = bt_sock_create, - }; - -+#ifdef CONFIG_ARCH_GUMSTIX -+extern void gumstix_bluetooth_load(void); -+#endif -+ - static int __init bt_init(void) - { - BT_INFO("Core ver %s", VERSION); - -+#ifdef CONFIG_ARCH_GUMSTIX -+ gumstix_bluetooth_load(); -+#endif -+ - sock_register(&bt_sock_family_ops); - - BT_INFO("HCI device and connection manager initialized"); -Index: linux-2.6.15gum/net/bluetooth/gumstix_bluetooth.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/net/bluetooth/gumstix_bluetooth.c -@@ -0,0 +1,50 @@ -+/* -+ * Gumstix bluetooth module intialization driver -+ * -+ * Author: Craig Hughes -+ * Created: December 9, 2004 -+ * Copyright: (C) 2004 Craig Hughes -+ * -+ * 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. -+ * -+ */ -+ -+#include <linux/module.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/delay.h> -+ -+#include <asm/arch/gumstix.h> -+ -+static void gumstix_bluetooth_load(void) -+{ -+} -+ -+EXPORT_SYMBOL(gumstix_bluetooth_load); -+ -+int __init gumstix_bluetooth_init(void) -+{ -+ /* Set up GPIOs to use the BTUART */ -+ pxa_gpio_mode(GPIO42_HWRXD_MD); -+ pxa_gpio_mode(GPIO43_HWTXD_MD); -+ pxa_gpio_mode(GPIO44_HWCTS_MD); -+ pxa_gpio_mode(GPIO45_HWRTS_MD); -+ -+ return 0; -+} -+ -+void __exit gumstix_bluetooth_exit(void) -+{ -+} -+ -+module_init(gumstix_bluetooth_init); -+module_exit(gumstix_bluetooth_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Craig Hughes <craig@gumstix.com>"); -+MODULE_DESCRIPTION("Gumstix board bluetooth module initialization driver"); -+MODULE_VERSION("1:0.1"); diff --git a/recipes/linux/linux-gumstix-2.6.15/modular-init-smc91x.patch b/recipes/linux/linux-gumstix-2.6.15/modular-init-smc91x.patch deleted file mode 100644 index 15a2bc06be..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/modular-init-smc91x.patch +++ /dev/null @@ -1,171 +0,0 @@ -Index: linux-2.6.15gum/drivers/net/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/net/Kconfig -+++ linux-2.6.15gum/drivers/net/Kconfig -@@ -826,6 +826,12 @@ config SMC91X - module, say M here and read <file:Documentation/modules.txt> as well - as <file:Documentation/networking/net-modules.txt>. - -+config SMC91X_GUMSTIX -+ tristate -+ default m if SMC91X=m -+ default y if SMC91X=y -+ depends on SMC91X && ARCH_GUMSTIX -+ - config SMC9194 - tristate "SMC 9194 support" - depends on NET_VENDOR_SMC && (ISA || MAC && BROKEN) -Index: linux-2.6.15gum/drivers/net/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/net/Makefile -+++ linux-2.6.15gum/drivers/net/Makefile -@@ -191,6 +191,7 @@ obj-$(CONFIG_SMC91X) += smc91x.o - obj-$(CONFIG_DM9000) += dm9000.o - obj-$(CONFIG_FEC_8XX) += fec_8xx/ - -+obj-$(CONFIG_SMC91X_GUMSTIX) += gumstix-smc91x.o - obj-$(CONFIG_ARM) += arm/ - obj-$(CONFIG_DEV_APPLETALK) += appletalk/ - obj-$(CONFIG_TR) += tokenring/ -Index: linux-2.6.15gum/drivers/net/smc91x.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/net/smc91x.c -+++ linux-2.6.15gum/drivers/net/smc91x.c -@@ -2366,6 +2366,10 @@ static struct platform_driver smc_driver - }, - }; - -+#ifdef CONFIG_ARCH_GUMSTIX -+extern void gumstix_smc91x_load(void); -+#endif -+ - static int __init smc_init(void) - { - #ifdef MODULE -@@ -2377,6 +2381,10 @@ static int __init smc_init(void) - #endif - #endif - -+#ifdef CONFIG_ARCH_GUMSTIX -+ gumstix_smc91x_load(); -+#endif -+ - return platform_driver_register(&smc_driver); - } - -Index: linux-2.6.15gum/drivers/net/gumstix-smc91x.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/net/gumstix-smc91x.c -@@ -0,0 +1,111 @@ -+/* -+ * Gumstix SMC91C111 chip intialization driver -+ * -+ * Author: Craig Hughes -+ * Created: December 9, 2004 -+ * Copyright: (C) 2004 Craig Hughes -+ * -+ * 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. -+ * -+ */ -+ -+#include <linux/module.h> -+#include <linux/ioport.h> -+#include <linux/device.h> -+#include <linux/platform_device.h> -+#include <linux/delay.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/delay.h> -+ -+#include <asm/arch/gumstix.h> -+ -+static struct resource gumstix_smc91x0_resources[] = { -+ [0] = { -+ .name = "smc91x-regs", -+ .start = PXA_CS1_PHYS + 0x00000300, -+ .end = PXA_CS1_PHYS + 0x000fffff, -+ .flags = IORESOURCE_MEM, -+ }, -+ [1] = { -+ .start = GUMSTIX_ETH0_IRQ, -+ .end = GUMSTIX_ETH0_IRQ, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+static struct resource gumstix_smc91x1_resources[] = { -+ [0] = { -+ .name = "smc91x-regs", -+ .start = PXA_CS2_PHYS + 0x00000300, -+ .end = PXA_CS2_PHYS + 0x000fffff, -+ .flags = IORESOURCE_MEM, -+ }, -+ [1] = { -+ .start = GUMSTIX_ETH1_IRQ, -+ .end = GUMSTIX_ETH1_IRQ, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; -+ -+static struct platform_device gumstix_smc91x0_device = { -+ .name = "smc91x", -+ .id = 0, -+ .num_resources = ARRAY_SIZE(gumstix_smc91x0_resources), -+ .resource = gumstix_smc91x0_resources, -+}; -+ -+static struct platform_device gumstix_smc91x1_device = { -+ .name = "smc91x", -+ .id = 1, -+ .num_resources = ARRAY_SIZE(gumstix_smc91x1_resources), -+ .resource = gumstix_smc91x1_resources, -+}; -+ -+static struct platform_device *smc91x_devices[] __initdata = { -+ &gumstix_smc91x0_device, -+ &gumstix_smc91x1_device, -+}; -+ -+int __init gumstix_smc91x_init(void) -+{ -+ /* Set up nPWE */ -+ pxa_gpio_mode(GPIO49_nPWE_MD); -+ -+ /* Set up the chip selects */ -+ pxa_gpio_mode(GPIO15_nCS_1_MD); -+ pxa_gpio_mode(GPIO78_nCS_2_MD); -+ -+ /* Reset the SMC91c111(s) */ -+ pxa_gpio_mode(GPIO_GUMSTIX_ETH0_RST_MD); -+ pxa_gpio_mode(GPIO_GUMSTIX_ETH1_RST_MD); -+ GPSR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); -+ GPSR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); -+ udelay(1); // Hold RESET pin high for at least 100ns -+ GPCR(GPIO_GUMSTIX_ETH0_RST) = GPIO_bit(GPIO_GUMSTIX_ETH0_RST); -+ GPCR(GPIO_GUMSTIX_ETH1_RST) = GPIO_bit(GPIO_GUMSTIX_ETH1_RST); -+ msleep(50); -+ -+ return platform_add_devices(smc91x_devices, ARRAY_SIZE(smc91x_devices)); -+} -+ -+void __exit gumstix_smc91x_exit(void) -+{ -+ platform_device_unregister(&gumstix_smc91x1_device); -+ platform_device_unregister(&gumstix_smc91x0_device); -+} -+ -+void gumstix_smc91x_load(void) {} -+EXPORT_SYMBOL(gumstix_smc91x_load); -+ -+module_init(gumstix_smc91x_init); -+module_exit(gumstix_smc91x_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Craig Hughes <craig@gumstix.com>"); -+MODULE_DESCRIPTION("Gumstix board SMC91C111 chip initialization driver"); -+MODULE_VERSION("1:0.1"); diff --git a/recipes/linux/linux-gumstix-2.6.15/modular-init-usb-gadget.patch b/recipes/linux/linux-gumstix-2.6.15/modular-init-usb-gadget.patch deleted file mode 100644 index 94666ff812..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/modular-init-usb-gadget.patch +++ /dev/null @@ -1,105 +0,0 @@ -Index: linux-2.6.15gum/drivers/usb/gadget/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/usb/gadget/Kconfig -+++ linux-2.6.15gum/drivers/usb/gadget/Kconfig -@@ -56,6 +56,14 @@ config USB_GADGET_DEBUG_FILES - config USB_GADGET_SELECTED - boolean - -+config USB_GADGET_GUMSTIX -+ tristate -+ default m if USB_GADGET=m -+ default y if USB_GADGET=y -+ depends on USB_GADGET && ARCH_GUMSTIX -+ help -+ USB Gadget support for the Gumstix platform -+ - # - # USB Peripheral Controller Support - # -Index: linux-2.6.15gum/drivers/usb/gadget/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/usb/gadget/Makefile -+++ linux-2.6.15gum/drivers/usb/gadget/Makefile -@@ -7,6 +7,7 @@ obj-$(CONFIG_USB_PXA2XX) += pxa2xx_udc.o - obj-$(CONFIG_USB_GOKU) += goku_udc.o - obj-$(CONFIG_USB_OMAP) += omap_udc.o - obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o -+obj-$(CONFIG_USB_GADGET_GUMSTIX) += gumstix_gadget.o - - # - # USB gadget drivers -Index: linux-2.6.15gum/drivers/usb/gadget/pxa2xx_udc.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/usb/gadget/pxa2xx_udc.c -+++ linux-2.6.15gum/drivers/usb/gadget/pxa2xx_udc.c -@@ -2679,8 +2679,16 @@ static struct platform_driver udc_driver - }, - }; - -+#ifdef CONFIG_ARCH_GUMSTIX -+extern void gumstix_usb_gadget_load(void); -+#endif -+ - static int __init udc_init(void) - { -+#ifdef CONFIG_ARCH_GUMSTIX -+ gumstix_usb_gadget_load(); -+#endif -+ - printk(KERN_INFO "%s: version %s\n", driver_name, DRIVER_VERSION); - return platform_driver_register(&udc_driver); - } -Index: linux-2.6.15gum/drivers/usb/gadget/gumstix_gadget.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/usb/gadget/gumstix_gadget.c -@@ -0,0 +1,48 @@ -+/* -+ * Gumstix USB gadget intialization driver -+ * -+ * Author: Craig Hughes -+ * Created: December 9, 2004 -+ * Copyright: (C) 2004 Craig Hughes -+ * -+ * 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. -+ * -+ */ -+ -+#include <linux/module.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/delay.h> -+#include <asm/irq.h> -+ -+#include <asm/arch/gumstix.h> -+#include <asm/arch/udc.h> -+ -+int __init gumstix_usb_gadget_init(void) -+{ -+ pxa_gpio_mode(GPIO_GUMSTIX_USB_GPIOx_DIS_MD); -+ pxa_gpio_mode(GPIO_GUMSTIX_USB_GPIOn_MD); -+ -+ set_irq_type(GUMSTIX_USB_INTR_IRQ, IRQT_BOTHEDGE); -+ -+ return 0; -+} -+ -+void __exit gumstix_usb_gadget_exit(void) -+{ -+} -+ -+void gumstix_usb_gadget_load(void) {} -+EXPORT_SYMBOL(gumstix_usb_gadget_load); -+ -+module_init(gumstix_usb_gadget_init); -+module_exit(gumstix_usb_gadget_exit); -+ -+MODULE_LICENSE("GPL"); -+MODULE_AUTHOR("Craig Hughes <craig@gumstix.com>"); -+MODULE_DESCRIPTION("Gumstix board USB gadget initialization driver"); -+MODULE_VERSION("1:0.1"); diff --git a/recipes/linux/linux-gumstix-2.6.15/proc-gpio.patch b/recipes/linux/linux-gumstix-2.6.15/proc-gpio.patch deleted file mode 100644 index 1a53d1b1d0..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/proc-gpio.patch +++ /dev/null @@ -1,401 +0,0 @@ -Index: linux-2.6.15gum/arch/arm/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/arch/arm/Kconfig -+++ linux-2.6.15gum/arch/arm/Kconfig -@@ -316,6 +316,8 @@ config PCI_HOST_VIA82C505 - depends on PCI && ARCH_SHARK - default y - -+source "drivers/gpio/Kconfig" -+ - source "drivers/pci/Kconfig" - - source "drivers/pcmcia/Kconfig" -Index: linux-2.6.15gum/drivers/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/Makefile -+++ linux-2.6.15gum/drivers/Makefile -@@ -70,3 +70,4 @@ obj-$(CONFIG_SGI_IOC4) += sn/ - obj-y += firmware/ - obj-$(CONFIG_CRYPTO) += crypto/ - obj-$(CONFIG_SUPERH) += sh/ -+obj-$(CONFIG_PROC_GPIO) += gpio/ -Index: linux-2.6.15gum/drivers/gpio/Kconfig -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/gpio/Kconfig -@@ -0,0 +1,6 @@ -+config PROC_GPIO -+ tristate "GPIO /proc interface" -+ depends on PXA25x -+ help -+ This enables an interface under /proc/gpio which allows reading or setting -+ of any GPIO. Currently only reading is supported. -Index: linux-2.6.15gum/drivers/gpio/Makefile -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/gpio/Makefile -@@ -0,0 +1,3 @@ -+# Expose GPIOs under /proc -+obj-$(CONFIG_PROC_GPIO) += proc_gpio.o -+ -Index: linux-2.6.15gum/drivers/gpio/proc_gpio.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/gpio/proc_gpio.c -@@ -0,0 +1,355 @@ -+/* -+ * -+ * PXA25x GPIOs exposed under /proc for reading and writing -+ * They will show up under /proc/gpio/NN -+ * -+ * Based on patch 1773/1 in the arm kernel patch repository at arm.linux.co.uk -+ * -+ */ -+ -+#include <linux/config.h> -+#include <linux/module.h> -+#include <linux/init.h> -+#include <linux/proc_fs.h> -+#include <linux/string.h> -+#include <linux/ctype.h> -+ -+#include <asm/hardware.h> -+#include <asm/arch/pxa-regs.h> -+#include <asm/uaccess.h> -+ -+static struct proc_dir_entry *proc_gpio_parent; -+static struct proc_dir_entry *proc_gpios[85]; -+ -+typedef struct -+{ -+ int gpio; -+ char name[32]; -+} gpio_summary_type; -+ -+static gpio_summary_type gpio_summaries[85] = -+{ -+ { 0, "GPIO0" }, -+ { 1, "GPIO1" }, -+ { 2, "GPIO2" }, -+ { 3, "GPIO3" }, -+ { 4, "GPIO4" }, -+ { 5, "GPIO5" }, -+ { 6, "GPIO6" }, -+ { 7, "GPIO7" }, -+ { 8, "GPIO8" }, -+ { 9, "GPIO9" }, -+ { 10, "GPIO10" }, -+ { 11, "GPIO11" }, -+ { 12, "GPIO12" }, -+ { 13, "GPIO13" }, -+ { 14, "GPIO14" }, -+ { 15, "GPIO15" }, -+ { 16, "GPIO16" }, -+ { 17, "GPIO17" }, -+ { 18, "GPIO18" }, -+ { 19, "GPIO19" }, -+ { 20, "GPIO20" }, -+ { 21, "GPIO21" }, -+ { 22, "GPIO22" }, -+ { 23, "GPIO23" }, -+ { 24, "GPIO24" }, -+ { 25, "GPIO25" }, -+ { 26, "GPIO26" }, -+ { 27, "GPIO27" }, -+ { 28, "GPIO28" }, -+ { 29, "GPIO29" }, -+ { 30, "GPIO30" }, -+ { 31, "GPIO31" }, -+ { 32, "GPIO32" }, -+ { 33, "GPIO33" }, -+ { 34, "GPIO34" }, -+ { 35, "GPIO35" }, -+ { 36, "GPIO36" }, -+ { 37, "GPIO37" }, -+ { 38, "GPIO38" }, -+ { 39, "GPIO39" }, -+ { 40, "GPIO40" }, -+ { 41, "GPIO41" }, -+ { 42, "GPIO42" }, -+ { 43, "GPIO43" }, -+ { 44, "GPIO44" }, -+ { 45, "GPIO45" }, -+ { 46, "GPIO46" }, -+ { 47, "GPIO47" }, -+ { 48, "GPIO48" }, -+ { 49, "GPIO49" }, -+ { 50, "GPIO50" }, -+ { 51, "GPIO51" }, -+ { 52, "GPIO52" }, -+ { 53, "GPIO53" }, -+ { 54, "GPIO54" }, -+ { 55, "GPIO55" }, -+ { 56, "GPIO56" }, -+ { 57, "GPIO57" }, -+ { 58, "GPIO58" }, -+ { 59, "GPIO59" }, -+ { 60, "GPIO60" }, -+ { 61, "GPIO61" }, -+ { 62, "GPIO62" }, -+ { 63, "GPIO63" }, -+ { 64, "GPIO64" }, -+ { 65, "GPIO65" }, -+ { 66, "GPIO66" }, -+ { 67, "GPIO67" }, -+ { 68, "GPIO68" }, -+ { 69, "GPIO69" }, -+ { 70, "GPIO70" }, -+ { 71, "GPIO71" }, -+ { 72, "GPIO72" }, -+ { 73, "GPIO73" }, -+ { 74, "GPIO74" }, -+ { 75, "GPIO75" }, -+ { 76, "GPIO76" }, -+ { 77, "GPIO77" }, -+ { 78, "GPIO78" }, -+ { 79, "GPIO79" }, -+ { 80, "GPIO80" }, -+ { 81, "GPIO81" }, -+ { 82, "GPIO82" }, -+ { 83, "GPIO83" }, -+ { 84, "GPIO84" }, -+}; -+ -+static int proc_gpio_write(struct file *file, const char __user *buf, -+ unsigned long count, void *data) -+{ -+ char *cur, lbuf[count + 1]; -+ gpio_summary_type *summary = data; -+ u32 altfn, direction, setclear, gafr; -+ -+ if (!capable(CAP_SYS_ADMIN)) -+ return -EACCES; -+ -+ memset(lbuf, 0, count + 1); -+ -+ if (copy_from_user(lbuf, buf, count)) -+ return -EFAULT; -+ -+ cur = lbuf; -+ -+ // Initialize to current state -+ altfn = ((GAFR(summary->gpio) >> ((summary->gpio & 0x0f) << 0x01)) & 0x03); -+ direction = GPDR(summary->gpio) & GPIO_bit(summary->gpio); -+ setclear = GPLR(summary->gpio) & GPIO_bit(summary->gpio); -+ while(1) -+ { -+ // We accept options: {GPIO|AF1|AF2|AF3}, {set|clear}, {in|out} -+ // Anything else is an error -+ while(cur[0] && (isspace(cur[0]) || ispunct(cur[0]))) cur = &(cur[1]); -+ -+ if('\0' == cur[0]) break; -+ -+ // Ok, so now we're pointing at the start of something -+ switch(cur[0]) -+ { -+ case 'G': -+ // Check that next is "PIO" -- '\0' will cause safe short-circuit if end of buf -+ if(!(cur[1] == 'P' && cur[2] == 'I' && cur[3] == 'O')) goto parse_error; -+ // Ok, so set this GPIO to GPIO (non-ALT) function -+ altfn = 0; -+ cur = &(cur[4]); -+ break; -+ case 'A': -+ if(!(cur[1] == 'F' && cur[2] >= '1' && cur[2] <= '3')) goto parse_error; -+ altfn = cur[2] - '0'; -+ cur = &(cur[3]); -+ break; -+ case 's': -+ if(!(cur[1] == 'e' && cur[2] == 't')) goto parse_error; -+ setclear = 1; -+ cur = &(cur[3]); -+ break; -+ case 'c': -+ if(!(cur[1] == 'l' && cur[2] == 'e' && cur[3] == 'a' && cur[4] == 'r')) goto parse_error; -+ setclear = 0; -+ cur = &(cur[5]); -+ break; -+ case 'i': -+ if(!(cur[1] == 'n')) goto parse_error; -+ direction = 0; -+ cur = &(cur[2]); -+ break; -+ case 'o': -+ if(!(cur[1] == 'u' && cur[2] == 't')) goto parse_error; -+ direction = 1; -+ cur = &(cur[3]); -+ break; -+ default: goto parse_error; -+ } -+ } -+ // Ok, now set gpio mode and value -+ if(direction) -+ GPDR(summary->gpio) |= GPIO_bit(summary->gpio); -+ else -+ GPDR(summary->gpio) &= ~GPIO_bit(summary->gpio); -+ -+ gafr = GAFR(summary->gpio) & ~(0x3 << (((summary->gpio) & 0xf)*2)); -+ GAFR(summary->gpio) = gafr | (altfn << (((summary->gpio) & 0xf)*2)); -+ -+ if(direction && !altfn) -+ { -+ if(setclear) GPSR(summary->gpio) = GPIO_bit(summary->gpio); -+ else GPCR(summary->gpio) = GPIO_bit(summary->gpio); -+ } -+ -+ printk(KERN_INFO "Set (%s,%s,%s) via /proc/gpio/%s\n",altfn ? (altfn == 1 ? "AF1" : (altfn == 2 ? "AF2" : "AF3")) : "GPIO", -+ direction ? "out" : "in", -+ setclear ? "set" : "clear", -+ summary->name); -+ -+ return count; -+ -+parse_error: -+ printk(KERN_CRIT "Parse error: Expect \"[GPIO|AF1|AF2|AF3]|[set|clear]|[in|out] ...\"\n"); -+ return -EINVAL; -+} -+ -+static int proc_gpio_read(char *page, char **start, off_t off, -+ int count, int *eof, void *data) -+{ -+ char *p = page; -+ gpio_summary_type *summary = data; -+ int len, i, af; -+ i = summary->gpio; -+ -+ p += sprintf(p, "%d\t%s\t%s\t%s\n", i, -+ (af = ((GAFR(i) >> ((i & 0x0f) << 0x01)) & 0x03)) ? (af == 1 ? "AF1" : (af == 2 ? "AF2" : "AF3")) : "GPIO", -+ (GPDR(i) & GPIO_bit(i)) ? "out" : "in", -+ (GPLR(i) & GPIO_bit(i)) ? "set" : "clear"); -+ -+ len = (p - page) - off; -+ -+ if(len < 0) -+ { -+ len = 0; -+ } -+ -+ *eof = (len <= count) ? 1 : 0; -+ *start = page + off; -+ -+ return len; -+} -+ -+static const char const *GAFR_DESC[] = { "GAFR0_L", "GAFR0_U", "GAFR1_L", "GAFR1_U", "GAFR2_L", "GAFR2_U" }; -+ -+static int proc_gafr_read(char *page, char **start, off_t off, -+ int count, int *eof, void *data) -+{ -+ char *p = page; -+ int i, len; -+ -+ for(i=0; i<=5; i++) -+ { -+ p += sprintf(p, "%s: %08x\n", GAFR_DESC[i], GAFR(i*16)); -+ } -+ -+ len = (p - page) - off; -+ -+ if(len < 0) -+ { -+ len = 0; -+ } -+ -+ *eof = (len <= count) ? 1 : 0; -+ *start = page + off; -+ -+ return len; -+} -+ -+static int proc_gpdr_read(char *page, char **start, off_t off, -+ int count, int *eof, void *data) -+{ -+ char *p = page; -+ int i, len; -+ -+ for(i=0; i<=2; i++) -+ { -+ p += sprintf(p, "GPDR%d: %08x\n", i, GPDR(i * 32)); -+ } -+ -+ len = (p - page) - off; -+ -+ if(len < 0) -+ { -+ len = 0; -+ } -+ -+ *eof = (len <= count) ? 1 : 0; -+ *start = page + off; -+ -+ return len; -+} -+ -+static int proc_gplr_read(char *page, char **start, off_t off, -+ int count, int *eof, void *data) -+{ -+ char *p = page; -+ int i, len; -+ -+ for(i=0; i<=2; i++) -+ { -+ p += sprintf(p, "GPLR%d: %08x\n", i, GPLR(i * 32)); -+ } -+ -+ len = (p - page) - off; -+ -+ if(len < 0) -+ { -+ len = 0; -+ } -+ -+ *eof = (len <= count) ? 1 : 0; -+ *start = page + off; -+ -+ return len; -+} -+ -+static int __init gpio_init(void) -+{ -+ int i; -+ -+ proc_gpio_parent = create_proc_entry("gpio", S_IFDIR | S_IRUGO | S_IXUGO, NULL); -+ if(!proc_gpio_parent) return 0; -+ -+ for(i=0; i < 85; i++) -+ { -+ proc_gpios[i] = create_proc_entry(gpio_summaries[i].name, 0644, proc_gpio_parent); -+ if(proc_gpios[i]) -+ { -+ proc_gpios[i]->data = &gpio_summaries[i]; -+ proc_gpios[i]->read_proc = proc_gpio_read; -+ proc_gpios[i]->write_proc = proc_gpio_write; -+ } -+ } -+ -+ create_proc_read_entry("GAFR", 0444, proc_gpio_parent, proc_gafr_read, NULL); -+ create_proc_read_entry("GPDR", 0444, proc_gpio_parent, proc_gpdr_read, NULL); -+ create_proc_read_entry("GPLR", 0444, proc_gpio_parent, proc_gplr_read, NULL); -+ -+ return 0; -+} -+ -+static void gpio_exit(void) -+{ -+ int i; -+ -+ remove_proc_entry("GAFR", proc_gpio_parent); -+ remove_proc_entry("GPDR", proc_gpio_parent); -+ remove_proc_entry("GPLR", proc_gpio_parent); -+ -+ for(i=0; i < 85; i++) -+ { -+ if(proc_gpios[i]) remove_proc_entry(gpio_summaries[i].name, proc_gpio_parent); -+ } -+ if(proc_gpio_parent) remove_proc_entry("gpio", NULL); -+} -+ -+module_init(gpio_init); -+module_exit(gpio_exit); -+MODULE_LICENSE("GPL"); diff --git a/recipes/linux/linux-gumstix-2.6.15/pxa255-gpio-count-bugfix.patch b/recipes/linux/linux-gumstix-2.6.15/pxa255-gpio-count-bugfix.patch deleted file mode 100644 index 655f6c577d..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/pxa255-gpio-count-bugfix.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: linux-2.6.15gum/include/asm-arm/arch-pxa/irqs.h -=================================================================== ---- linux-2.6.15gum.orig/include/asm-arm/arch-pxa/irqs.h -+++ linux-2.6.15gum/include/asm-arm/arch-pxa/irqs.h -@@ -74,7 +74,7 @@ - #define IRQ_TO_GPIO(i) (((i) < IRQ_GPIO(2)) ? ((i) - IRQ_GPIO0) : IRQ_TO_GPIO_2_x(i)) - - #if defined(CONFIG_PXA25x) --#define PXA_LAST_GPIO 80 -+#define PXA_LAST_GPIO 84 - #elif defined(CONFIG_PXA27x) - #define PXA_LAST_GPIO 127 - #endif diff --git a/recipes/linux/linux-gumstix-2.6.15/pxa2xx_udc.patch b/recipes/linux/linux-gumstix-2.6.15/pxa2xx_udc.patch deleted file mode 100644 index 1e17679907..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/pxa2xx_udc.patch +++ /dev/null @@ -1,57 +0,0 @@ -Index: linux-2.6.15gum/drivers/usb/gadget/pxa2xx_udc.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/usb/gadget/pxa2xx_udc.c -+++ linux-2.6.15gum/drivers/usb/gadget/pxa2xx_udc.c -@@ -101,6 +101,10 @@ static const char ep0name [] = "ep0"; - - #endif - -+#ifdef CONFIG_ARCH_GUMSTIX -+#undef CONFIG_USB_PXA2XX_SMALL -+#endif -+ - #include "pxa2xx_udc.h" - - -@@ -2494,6 +2498,41 @@ static int __init pxa2xx_udc_probe(struc - } - #endif - -+ /* Reset UDCCS register to be able to recover from whatever -+ * state UDC was previously in. */ -+ *dev->ep[ 2].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST; -+#ifndef CONFIG_USB_PXA2XX_SMALL -+ *dev->ep[ 7].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST; -+ *dev->ep[12].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST; -+#endif -+ -+ *dev->ep[ 1].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF | -+ UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP; -+#ifndef CONFIG_USB_PXA2XX_SMALL -+ *dev->ep[ 6].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF | -+ UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP; -+ *dev->ep[11].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF | -+ UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP; -+ -+ *dev->ep[ 3].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF | -+ UDCCS_II_TUR | UDCCS_II_TSP; -+ *dev->ep[ 8].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF | -+ UDCCS_II_TUR | UDCCS_II_TSP; -+ *dev->ep[13].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF | -+ UDCCS_II_TUR | UDCCS_II_TSP; -+ -+ *dev->ep[ 4].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF; -+ *dev->ep[ 9].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF; -+ *dev->ep[11].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF; -+ -+ *dev->ep[ 5].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF | -+ UDCCS_INT_TUR | UDCCS_INT_SST; -+ *dev->ep[10].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF | -+ UDCCS_INT_TUR | UDCCS_INT_SST; -+ *dev->ep[15].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF | -+ UDCCS_INT_TUR | UDCCS_INT_SST; -+#endif -+ - /* other non-static parts of init */ - dev->dev = &pdev->dev; - dev->mach = pdev->dev.platform_data; diff --git a/recipes/linux/linux-gumstix-2.6.15/rmk-2022-2-rtctime-sa110-pxa255-driver.patch b/recipes/linux/linux-gumstix-2.6.15/rmk-2022-2-rtctime-sa110-pxa255-driver.patch deleted file mode 100644 index 87f4ebdc38..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/rmk-2022-2-rtctime-sa110-pxa255-driver.patch +++ /dev/null @@ -1,329 +0,0 @@ -Index: linux-2.6.15gum/drivers/char/sa1100-rtc.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/char/sa1100-rtc.c -@@ -0,0 +1,297 @@ -+/* -+ * Real Time Clock interface for Linux on StrongARM SA1100 -+ * -+ * Copyright (c) 2000 Nils Faerber -+ * -+ * Based on rtc.c by Paul Gortmaker -+ * Date/time conversion routines taken from arch/arm/kernel/time.c -+ * by Linus Torvalds and Russel King -+ * and the GNU C Library -+ * ( ... I love the GPL ... just take what you need! ;) -+ * -+ * 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. -+ * -+ * 1.00 2001-06-08 Nicolas Pitre <nico@cam.org> -+ * - added periodic timer capability using OSMR1 -+ * - flag compatibility with other RTC chips -+ * - permission checks for ioctls -+ * - major cleanup, partial rewrite -+ * -+ * 0.03 2001-03-07 CIH <cih@coventive.com> -+ * - Modify the bug setups RTC clock. -+ * -+ * 0.02 2001-02-27 Nils Faerber <nils@@kernelconcepts.de> -+ * - removed mktime(), added alarm irq clear -+ * -+ * 0.01 2000-10-01 Nils Faerber <nils@@kernelconcepts.de> -+ * - initial release -+ */ -+ -+#include <linux/module.h> -+#include <linux/fs.h> -+#include <linux/miscdevice.h> -+#include <linux/string.h> -+#include <linux/init.h> -+#include <linux/poll.h> -+#include <linux/proc_fs.h> -+#include <linux/interrupt.h> -+#include <linux/rtc.h> -+ -+#ifdef CONFIG_ARCH_PXA -+#include <asm/arch/pxa-regs.h> -+#endif -+ -+#include <asm/bitops.h> -+#include <asm/hardware.h> -+#include <asm/irq.h> -+#include <asm/rtc.h> -+ -+#define TIMER_FREQ 3686400 -+ -+#define RTC_DEF_DIVIDER 32768 - 1 -+#define RTC_DEF_TRIM 0 -+ -+/* Those are the bits from a classic RTC we want to mimic */ -+#define RTC_IRQF 0x80 /* any of the following 3 is active */ -+#define RTC_PF 0x40 -+#define RTC_AF 0x20 -+#define RTC_UF 0x10 -+ -+static unsigned long rtc_freq = 1024; -+static struct rtc_time rtc_alarm = { -+ .tm_year = 0, -+ .tm_mon = 0, -+ .tm_mday = 0, -+ .tm_hour = 0, -+ .tm_mon = 0, -+ .tm_sec = 0, -+}; -+ -+extern spinlock_t rtc_lock; -+ -+static int rtc_update_alarm(struct rtc_time *alrm) -+{ -+ struct rtc_time alarm_tm, now_tm; -+ unsigned long now, time; -+ int ret; -+ -+ printk("Updating alarm\n"); -+ do { -+ now = RCNR; -+ rtc_time_to_tm(now, &now_tm); -+ rtc_next_alarm_time(&alarm_tm, &now_tm, alrm); -+ ret = rtc_tm_to_time(&alarm_tm, &time); -+ if (ret != 0) -+ break; -+ -+ RTSR = RTSR & (RTSR_HZE|RTSR_ALE|RTSR_AL); -+ RTAR = time; -+ } while (now != RCNR); -+ printk("set RTAR to %lx, now is %lx\n", time, now); -+ -+ return ret; -+} -+ -+static irqreturn_t rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) -+{ -+ unsigned int rtsr; -+ unsigned long events = 0; -+ -+ spin_lock(&rtc_lock); -+ -+ rtsr = RTSR; -+ /* clear interrupt sources */ -+ RTSR = 0; -+ RTSR = (RTSR_AL|RTSR_HZ) & (rtsr >> 2); -+ -+ printk(KERN_CRIT "rtc_interrupt: rtsr = %x\n", rtsr); -+ -+ /* clear alarm interrupt if it has occurred */ -+ if (rtsr & RTSR_AL) { -+ printk(KERN_CRIT "ALARM INTRRUPT\n"); -+ rtsr &= ~RTSR_ALE; -+ } -+ RTSR = rtsr & (RTSR_ALE|RTSR_HZE); -+ -+ /* update irq data & counter */ -+ if (rtsr & RTSR_AL) -+ events |= (RTC_AF|RTC_IRQF); -+ if (rtsr & RTSR_HZ) -+ events |= (RTC_UF|RTC_IRQF); -+ -+ rtc_update(1, events); -+ -+ if (rtsr & RTSR_AL && rtc_periodic_alarm(&rtc_alarm)) -+ rtc_update_alarm(&rtc_alarm); -+ -+ spin_unlock(&rtc_lock); -+ -+ return IRQ_HANDLED; -+} -+ -+ -+static int sa1100_rtc_open(void) -+{ -+ int ret; -+ -+ ret = request_irq(IRQ_RTC1Hz, rtc_interrupt, SA_INTERRUPT, "rtc 1Hz", NULL); -+ if (ret) { -+ printk(KERN_ERR "rtc: IRQ%d already in use.\n", IRQ_RTC1Hz); -+ goto fail_ui; -+ } -+ ret = request_irq(IRQ_RTCAlrm, rtc_interrupt, SA_INTERRUPT, "rtc Alrm", NULL); -+ if (ret) { -+ printk(KERN_ERR "rtc: IRQ%d already in use.\n", IRQ_RTCAlrm); -+ goto fail_ai; -+ } -+ return 0; -+ -+ fail_ai: -+ free_irq(IRQ_RTC1Hz, NULL); -+ fail_ui: -+ return ret; -+} -+ -+static void sa1100_rtc_release(void) -+{ -+ spin_lock_irq (&rtc_lock); -+ RTSR = 0; -+ OIER &= ~OIER_E1; -+ OSSR = OSSR_M1; -+ spin_unlock_irq (&rtc_lock); -+ -+ free_irq(IRQ_RTCAlrm, NULL); -+ free_irq(IRQ_RTC1Hz, NULL); -+} -+ -+static int sa1100_rtc_ioctl(unsigned int cmd, unsigned long arg) -+{ -+ switch (cmd) { -+ case RTC_AIE_OFF: -+ spin_lock_irq(&rtc_lock); -+ RTSR &= ~RTSR_ALE; -+ spin_unlock_irq(&rtc_lock); -+ return 0; -+ case RTC_AIE_ON: -+ spin_lock_irq(&rtc_lock); -+ RTSR |= RTSR_ALE; -+ spin_unlock_irq(&rtc_lock); -+ return 0; -+ case RTC_UIE_OFF: -+ spin_lock_irq(&rtc_lock); -+ RTSR &= ~RTSR_HZE; -+ spin_unlock_irq(&rtc_lock); -+ return 0; -+ case RTC_UIE_ON: -+ spin_lock_irq(&rtc_lock); -+ RTSR |= RTSR_HZE; -+ spin_unlock_irq(&rtc_lock); -+ return 0; -+ } -+ return -EINVAL; -+} -+ -+static void sa1100_rtc_read_time(struct rtc_time *tm) -+{ -+ rtc_time_to_tm(RCNR, tm); -+} -+ -+static int sa1100_rtc_set_time(struct rtc_time *tm) -+{ -+ unsigned long time; -+ int ret; -+ -+ ret = rtc_tm_to_time(tm, &time); -+ if (ret == 0) -+ RCNR = time; -+ return ret; -+} -+ -+static void sa1100_rtc_read_alarm(struct rtc_wkalrm *alrm) -+{ -+ memcpy(&alrm->time, &rtc_alarm, sizeof(struct rtc_time)); -+ alrm->pending = RTSR & RTSR_AL ? 1 : 0; -+} -+ -+static int sa1100_rtc_set_alarm(struct rtc_wkalrm *alrm) -+{ -+ int ret; -+ -+ printk("sa1100_rtc_set_alarm\n"); -+ -+ spin_lock_irq(&rtc_lock); -+ ret = rtc_update_alarm(&alrm->time); -+ if (ret == 0) { -+ memcpy(&rtc_alarm, &alrm->time, sizeof(struct rtc_time)); -+ -+ if (alrm->enabled) -+ enable_irq_wake(IRQ_RTCAlrm); -+ else -+ disable_irq_wake(IRQ_RTCAlrm); -+ } -+ spin_unlock_irq(&rtc_lock); -+ -+ return ret; -+} -+ -+static int sa1100_rtc_proc(char *buf) -+{ -+ char *p = buf; -+ -+ p += sprintf(p, "trim/divider\t: 0x%08x\n", RTTR); -+ p += sprintf(p, "alarm_IRQ\t: %s\n", (RTSR & RTSR_ALE) ? "yes" : "no" ); -+ p += sprintf(p, "update_IRQ\t: %s\n", (RTSR & RTSR_HZE) ? "yes" : "no"); -+ p += sprintf(p, "periodic_IRQ\t: %s\n", (OIER & OIER_E1) ? "yes" : "no"); -+ p += sprintf(p, "periodic_freq\t: %ld\n", rtc_freq); -+ -+ return p - buf; -+} -+ -+static struct rtc_ops sa1100_rtc_ops = { -+ .owner = THIS_MODULE, -+ .open = sa1100_rtc_open, -+ .release = sa1100_rtc_release, -+ .ioctl = sa1100_rtc_ioctl, -+ -+ .read_time = sa1100_rtc_read_time, -+ .set_time = sa1100_rtc_set_time, -+ .read_alarm = sa1100_rtc_read_alarm, -+ .set_alarm = sa1100_rtc_set_alarm, -+ .proc = sa1100_rtc_proc, -+}; -+ -+static int __init rtc_init(void) -+{ -+ /* -+ * According to the manual we should be able to let RTTR be zero -+ * and then a default diviser for a 32.768KHz clock is used. -+ * Apparently this doesn't work, at least for my SA1110 rev 5. -+ * If the clock divider is uninitialized then reset it to the -+ * default value to get the 1Hz clock. -+ */ -+ if (RTTR == 0) { -+ RTTR = RTC_DEF_DIVIDER + (RTC_DEF_TRIM << 16); -+ printk(KERN_WARNING "rtc: warning: initializing default clock divider/trim value\n"); -+ /* The current RTC value probably doesn't make sense either */ -+ RCNR = 0; -+ } -+ -+ register_rtc(&sa1100_rtc_ops); -+ -+ return 0; -+} -+ -+static void __exit rtc_exit(void) -+{ -+ unregister_rtc(&sa1100_rtc_ops); -+} -+ -+module_init(rtc_init); -+module_exit(rtc_exit); -+ -+MODULE_AUTHOR("Nils Faerber <nils@@kernelconcepts.de>"); -+MODULE_DESCRIPTION("SA1100 Realtime Clock Driver (RTC)"); -+MODULE_LICENSE("GPL"); /* so says the header */ -Index: linux-2.6.15gum/drivers/char/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/char/Makefile -+++ linux-2.6.15gum/drivers/char/Makefile -@@ -60,6 +60,7 @@ obj-$(CONFIG_RTC) += rtc.o - obj-$(CONFIG_HPET) += hpet.o - obj-$(CONFIG_GEN_RTC) += genrtc.o - obj-$(CONFIG_EFI_RTC) += efirtc.o -+obj-$(CONFIG_SA1100_RTC) += sa1100-rtc.o - obj-$(CONFIG_SGI_DS1286) += ds1286.o - obj-$(CONFIG_SGI_IP27_RTC) += ip27-rtc.o - obj-$(CONFIG_DS1302) += ds1302.o -Index: linux-2.6.15gum/drivers/char/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/char/Kconfig -+++ linux-2.6.15gum/drivers/char/Kconfig -@@ -790,6 +790,10 @@ config COBALT_LCD - This option enables support for the LCD display and buttons found - on Cobalt systems through a misc device. - -+config SA1100_RTC -+ tristate "SA1100/PXA2xx Real Time Clock" -+ depends on ARCH_SA1100 || ARCH_PXA -+ - config DTLK - tristate "Double Talk PC internal speech card support" - help diff --git a/recipes/linux/linux-gumstix-2.6.15/rmk_pxa_mmc_timeout.patch b/recipes/linux/linux-gumstix-2.6.15/rmk_pxa_mmc_timeout.patch deleted file mode 100644 index d7d5fda08c..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/rmk_pxa_mmc_timeout.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git a/drivers/mmc/pxamci.c b/drivers/mmc/pxamci.c ---- a/drivers/mmc/pxamci.c -+++ b/drivers/mmc/pxamci.c -@@ -71,11 +71,6 @@ struct pxamci_host { - unsigned int dma_dir; - }; - --static inline unsigned int ns_to_clocks(unsigned int ns) --{ -- return (ns * (CLOCKRATE / 1000000) + 999) / 1000; --} -- - static void pxamci_stop_clock(struct pxamci_host *host) - { - if (readl(host->base + MMC_STAT) & STAT_CLK_EN) { -@@ -119,6 +114,7 @@ static void pxamci_disable_irq(struct px - static void pxamci_setup_data(struct pxamci_host *host, struct mmc_data *data) - { - unsigned int nob = data->blocks; -+ unsigned long long clks; - unsigned int timeout; - u32 dcmd; - int i; -@@ -131,7 +127,9 @@ static void pxamci_setup_data(struct pxa - writel(nob, host->base + MMC_NOB); - writel(1 << data->blksz_bits, host->base + MMC_BLKLEN); - -- timeout = ns_to_clocks(data->timeout_ns) + data->timeout_clks; -+ clks = (unsigned long long)data->timeout_ns * CLOCKRATE; -+ do_div(clks, 1000000000UL); -+ timeout = (unsigned int)clks + (data->timeout_clks << host->clkrt); - writel((timeout + 255) / 256, host->base + MMC_RDTO); - - if (data->flags & MMC_DATA_READ) { diff --git a/recipes/linux/linux-gumstix-2.6.15/serial-ether-addr.patch b/recipes/linux/linux-gumstix-2.6.15/serial-ether-addr.patch deleted file mode 100644 index 88442655e4..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/serial-ether-addr.patch +++ /dev/null @@ -1,46 +0,0 @@ -Index: linux-2.6.15gum/drivers/usb/gadget/ether.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/usb/gadget/ether.c -+++ linux-2.6.15gum/drivers/usb/gadget/ether.c -@@ -2153,6 +2153,29 @@ static u8 __init nibble (unsigned char c - return 0; - } - -+/** -+ * gen_serial_ether_addr - Generate software assigned Ethernet address -+ * based on the system_serial number -+ * @addr: Pointer to a six-byte array containing the Ethernet address -+ * -+ * Generate an Ethernet address (MAC) that is not multicast -+ * and has the local assigned bit set, keyed on the system_serial -+ */ -+static inline void gen_serial_ether_addr(u8 *addr) -+{ -+ static u8 ether_serial_digit = 1; -+ addr [0] = system_serial_high >> 8; -+ addr [1] = system_serial_high; -+ addr [2] = system_serial_low >> 24; -+ addr [3] = system_serial_low >> 16; -+ addr [4] = system_serial_low >> 8; -+ addr [5] = (system_serial_low & 0xc0) | /* top bits are from system serial */ -+ (2 << 4) | /* 2 bits identify interface type 1=ether, 2=usb, 3&4 undef */ -+ ((ether_serial_digit++) & 0x0f); /* 15 possible interfaces of each type */ -+ addr [0] &= 0xfe; /* clear multicast bit */ -+ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ -+} -+ - static void __init get_ether_addr (const char *str, u8 *dev_addr) - { - if (str) { -@@ -2170,7 +2193,10 @@ static void __init get_ether_addr (const - if (is_valid_ether_addr (dev_addr)) - return; - } -- random_ether_addr(dev_addr); -+ if(system_serial_high | system_serial_low) -+ gen_serial_ether_addr(dev_addr); -+ else -+ random_ether_addr(dev_addr); - } - - static int __init diff --git a/recipes/linux/linux-gumstix-2.6.15/smc-ether-addr.patch b/recipes/linux/linux-gumstix-2.6.15/smc-ether-addr.patch deleted file mode 100644 index 920aa53ad8..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/smc-ether-addr.patch +++ /dev/null @@ -1,53 +0,0 @@ -Index: linux-2.6.15gum/drivers/net/smc91x.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/net/smc91x.c -+++ linux-2.6.15gum/drivers/net/smc91x.c -@@ -1818,6 +1818,30 @@ static int __init smc_findirq(void __iom - return probe_irq_off(cookie); - } - -+/** -+ * gen_serial_ether_addr - Generate software assigned Ethernet address -+ * based on the system_serial number -+ * @addr: Pointer to a six-byte array containing the Ethernet address -+ * -+ * Generate an Ethernet address (MAC) that is not multicast -+ * and has the local assigned bit set, keyed on the system_serial -+ */ -+static inline void gen_serial_ether_addr(u8 *addr) -+{ -+ static u8 ether_serial_digit = 1; -+ addr [0] = system_serial_high >> 8; -+ addr [1] = system_serial_high; -+ addr [2] = system_serial_low >> 24; -+ addr [3] = system_serial_low >> 16; -+ addr [4] = system_serial_low >> 8; -+ addr [5] = (system_serial_low & 0xc0) | /* top bits are from system serial */ -+ (1 << 4) | /* 2 bits identify interface type 1=ether, 2=usb, 3&4 undef */ -+ ((ether_serial_digit++) & 0x0f); /* 15 possible interfaces of each type */ -+ addr [0] &= 0xfe; /* clear multicast bit */ -+ addr [0] |= 0x02; /* set local assignment bit (IEEE802) */ -+} -+ -+ - /* - * Function: smc_probe(unsigned long ioaddr) - * -@@ -2036,15 +2060,13 @@ static int __init smc_probe(struct net_d - THROTTLE_TX_PKTS ? " [throttle_tx]" : ""); - - if (!is_valid_ether_addr(dev->dev_addr)) { -- printk("%s: Invalid ethernet MAC address. Please " -- "set using ifconfig\n", dev->name); -- } else { -+ gen_serial_ether_addr(dev->dev_addr); -+ } - /* Print the Ethernet address */ - printk("%s: Ethernet addr: ", dev->name); - for (i = 0; i < 5; i++) - printk("%2.2x:", dev->dev_addr[i]); - printk("%2.2x\n", dev->dev_addr[5]); -- } - - if (lp->phy_type == 0) { - PRINTK("%s: No PHY found\n", dev->name); diff --git a/recipes/linux/linux-gumstix-2.6.15/ucb1400-ac97-audio.patch b/recipes/linux/linux-gumstix-2.6.15/ucb1400-ac97-audio.patch deleted file mode 100644 index 32a0af5a05..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/ucb1400-ac97-audio.patch +++ /dev/null @@ -1,84 +0,0 @@ -Index: linux-2.6.15gum/sound/pci/ac97/ac97_codec.c -=================================================================== ---- linux-2.6.15gum.orig/sound/pci/ac97/ac97_codec.c -+++ linux-2.6.15gum/sound/pci/ac97/ac97_codec.c -@@ -150,7 +150,7 @@ static const ac97_codec_id_t snd_ac97_co - { 0x4e534300, 0xffffffff, "LM4540,43,45,46,48", NULL, NULL }, // only guess --jk - { 0x4e534331, 0xffffffff, "LM4549", NULL, NULL }, - { 0x4e534350, 0xffffffff, "LM4550", NULL, NULL }, --{ 0x50534304, 0xffffffff, "UCB1400", NULL, NULL }, -+{ 0x50534304, 0xffffffff, "UCB1400", patch_ucb1400, NULL, AC97_HAS_NO_STD_PCM }, - { 0x53494c20, 0xffffffe0, "Si3036,8", mpatch_si3036, mpatch_si3036, AC97_MODEM_PATCH }, - { 0x54524102, 0xffffffff, "TR28022", NULL, NULL }, - { 0x54524106, 0xffffffff, "TR28026", NULL, NULL }, -Index: linux-2.6.15gum/sound/pci/ac97/ac97_patch.c -=================================================================== ---- linux-2.6.15gum.orig/sound/pci/ac97/ac97_patch.c -+++ linux-2.6.15gum/sound/pci/ac97/ac97_patch.c -@@ -375,6 +375,56 @@ int patch_yamaha_ymf753(ac97_t * ac97) - } - - /* -+ * UCB1400 codec -+ */ -+ -+#define AC97_UCB1400_FCSR1 0x6a -+#define AC97_UCB1400_FCSR2 0x6c -+ -+static const snd_kcontrol_new_t ucb1400_snd_ac97_controls[] = { -+ AC97_SINGLE("Tone Control - Bass", AC97_UCB1400_FCSR1, 11, 4, 0), -+ AC97_SINGLE("Tone Control - Treble", AC97_UCB1400_FCSR1, 9, 2, 0), -+ AC97_SINGLE("Headphone Playback Switch", AC97_UCB1400_FCSR1, 6, 1, 0), -+ AC97_SINGLE("De-emphasis", AC97_UCB1400_FCSR1, 5, 1, 0), -+ AC97_SINGLE("DC Filter", AC97_UCB1400_FCSR1, 4, 1, 0), -+ AC97_SINGLE("Hi-pass Filter", AC97_UCB1400_FCSR1, 3, 1, 0), -+ AC97_SINGLE("ADC Filter", AC97_UCB1400_FCSR2, 12, 1, 0), -+}; -+ -+int patch_ucb1400(ac97_t * ac97) -+{ -+ int err, i; -+ -+ for(i = 0; i < ARRAY_SIZE(ucb1400_snd_ac97_controls); i++) { -+ if((err = snd_ctl_add(ac97->bus->card, snd_ac97_cnew(&ucb1400_snd_ac97_controls[i], ac97))) < 0) -+ return err; -+ } -+ -+ snd_ac97_write_cache(ac97, AC97_UCB1400_FCSR1, -+ (0 << 11) | // 0 base boost -+ (0 << 9) | // 0 treble boost -+ (0 << 7) | // Mode = flat -+ (1 << 6) | // Headphones enable -+ (0 << 5) | // De-emphasis disabled -+ (1 << 4) | // DC filter enabled -+ (1 << 3) | // Hi-pass filter enabled -+ (0 << 2) | // disable interrupt signalling via GPIO_INT -+ (1 << 0) // clear ADC overflow status if set -+ ); -+ -+ snd_ac97_write_cache(ac97, AC97_UCB1400_FCSR2, -+ (0 << 15) | // must be 0 -+ (0 << 13) | // must be 0 -+ (1 << 12) | // ADC filter enabled -+ (0 << 10) | // must be 0 -+ (0 << 4) | // Smart low power mode on neither Codec nor PLL -+ (0 << 0) // must be 0 -+ ); -+ -+ return 0; -+} -+ -+/* - * May 2, 2003 Liam Girdwood <liam.girdwood@wolfsonmicro.com> - * removed broken wolfson00 patch. - * added support for WM9705,WM9708,WM9709,WM9710,WM9711,WM9712 and WM9717. -Index: linux-2.6.15gum/sound/pci/ac97/ac97_patch.h -=================================================================== ---- linux-2.6.15gum.orig/sound/pci/ac97/ac97_patch.h -+++ linux-2.6.15gum/sound/pci/ac97/ac97_patch.h -@@ -58,4 +58,5 @@ int patch_cm9780(ac97_t * ac97); - int patch_vt1616(ac97_t * ac97); - int patch_vt1617a(ac97_t * ac97); - int patch_it2646(ac97_t * ac97); -+int patch_ucb1400(ac97_t * ac97); - int mpatch_si3036(ac97_t * ac97); diff --git a/recipes/linux/linux-gumstix-2.6.15/ucb1400-touchscreen.patch b/recipes/linux/linux-gumstix-2.6.15/ucb1400-touchscreen.patch deleted file mode 100644 index cd7fe41661..0000000000 --- a/recipes/linux/linux-gumstix-2.6.15/ucb1400-touchscreen.patch +++ /dev/null @@ -1,704 +0,0 @@ -This patch is slightly adjusted from - -http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3073/1 -http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3074/2 -http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3075/2 - -in order to get it to apply cleanly to the released 2.6.15 codebase -and to put the Kconfig stuff in a more reasonable place in the tree. -Actually, I think Kconfig should probably separate the notion of the -touchscreen driver and the AC97-MCP layer thing; but that problem is -basically in the underlying mcp-based ucb1x00 driver layout in the -first place. -Index: linux-2.6.15gum/drivers/mfd/Makefile -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/Makefile -+++ linux-2.6.15gum/drivers/mfd/Makefile -@@ -10,3 +10,6 @@ obj-$(CONFIG_MCP_UCB1200_TS) += ucb1x00- - ifeq ($(CONFIG_SA1100_ASSABET),y) - obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o - endif -+ -+obj-$(CONFIG_TOUCHSCREEN_UCB1400) += mcp-ac97.o ucb1x00-core.o ucb1x00-ts.o -+ -Index: linux-2.6.15gum/drivers/mfd/mcp-core.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/mcp-core.c -+++ linux-2.6.15gum/drivers/mfd/mcp-core.c -@@ -18,7 +18,6 @@ - #include <linux/slab.h> - #include <linux/string.h> - --#include <asm/dma.h> - #include <asm/system.h> - - #include "mcp.h" -@@ -206,6 +205,7 @@ struct mcp *mcp_host_alloc(struct device - mcp->attached_device.bus = &mcp_bus_type; - mcp->attached_device.dma_mask = parent->dma_mask; - mcp->attached_device.release = mcp_release; -+ mcp->dev = &mcp->attached_device; - } - return mcp; - } -Index: linux-2.6.15gum/drivers/mfd/mcp-sa11x0.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/mcp-sa11x0.c -+++ linux-2.6.15gum/drivers/mfd/mcp-sa11x0.c -@@ -31,8 +31,12 @@ - #include "mcp.h" - - struct mcp_sa11x0 { -- u32 mccr0; -- u32 mccr1; -+ u32 mccr0; -+ u32 mccr1; -+ dma_device_t dma_audio_rd; -+ dma_device_t dma_audio_wr; -+ dma_device_t dma_telco_rd; -+ dma_device_t dma_telco_wr; - }; - - #define priv(mcp) ((struct mcp_sa11x0 *)mcp_priv(mcp)) -@@ -159,10 +163,10 @@ static int mcp_sa11x0_probe(struct platf - mcp->owner = THIS_MODULE; - mcp->ops = &mcp_sa11x0; - mcp->sclk_rate = data->sclk_rate; -- mcp->dma_audio_rd = DMA_Ser4MCP0Rd; -- mcp->dma_audio_wr = DMA_Ser4MCP0Wr; -- mcp->dma_telco_rd = DMA_Ser4MCP1Rd; -- mcp->dma_telco_wr = DMA_Ser4MCP1Wr; -+ priv(mcp)->dma_audio_rd = DMA_Ser4MCP0Rd; -+ priv(mcp)->dma_audio_wr = DMA_Ser4MCP0Wr; -+ priv(mcp)->dma_telco_rd = DMA_Ser4MCP1Rd; -+ priv(mcp)->dma_telco_wr = DMA_Ser4MCP1Wr; - - platform_set_drvdata(pdev, mcp); - -Index: linux-2.6.15gum/drivers/mfd/mcp.h -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/mcp.h -+++ linux-2.6.15gum/drivers/mfd/mcp.h -@@ -19,11 +19,8 @@ struct mcp { - int use_count; - unsigned int sclk_rate; - unsigned int rw_timeout; -- dma_device_t dma_audio_rd; -- dma_device_t dma_audio_wr; -- dma_device_t dma_telco_rd; -- dma_device_t dma_telco_wr; - struct device attached_device; -+ struct device *dev; - }; - - struct mcp_ops { -Index: linux-2.6.15gum/drivers/mfd/ucb1x00-assabet.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/ucb1x00-assabet.c -+++ linux-2.6.15gum/drivers/mfd/ucb1x00-assabet.c -@@ -15,8 +15,6 @@ - #include <linux/proc_fs.h> - #include <linux/device.h> - --#include <asm/dma.h> -- - #include "ucb1x00.h" - - #define UCB1X00_ATTR(name,input)\ -Index: linux-2.6.15gum/drivers/mfd/ucb1x00-core.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/ucb1x00-core.c -+++ linux-2.6.15gum/drivers/mfd/ucb1x00-core.c -@@ -23,14 +23,17 @@ - #include <linux/init.h> - #include <linux/errno.h> - #include <linux/interrupt.h> -+#include <linux/kthread.h> - #include <linux/device.h> - --#include <asm/dma.h> --#include <asm/hardware.h> --#include <asm/irq.h> -- - #include "ucb1x00.h" - -+#ifdef CONFIG_UCB1400 -+#define UCB_IS_1400(id) ((id) == UCB_ID_1400) -+#else -+#define UCB_IS_1400(id) (0) -+#endif -+ - static DECLARE_MUTEX(ucb1x00_sem); - static LIST_HEAD(ucb1x00_drivers); - static LIST_HEAD(ucb1x00_devices); -@@ -58,9 +61,9 @@ void ucb1x00_io_set_dir(struct ucb1x00 * - spin_lock_irqsave(&ucb->io_lock, flags); - ucb->io_dir |= out; - ucb->io_dir &= ~in; -+ spin_unlock_irqrestore(&ucb->io_lock, flags); - - ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir); -- spin_unlock_irqrestore(&ucb->io_lock, flags); - } - - /** -@@ -86,9 +89,9 @@ void ucb1x00_io_write(struct ucb1x00 *uc - spin_lock_irqsave(&ucb->io_lock, flags); - ucb->io_out |= set; - ucb->io_out &= ~clear; -+ spin_unlock_irqrestore(&ucb->io_lock, flags); - - ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out); -- spin_unlock_irqrestore(&ucb->io_lock, flags); - } - - /** -@@ -178,7 +181,7 @@ unsigned int ucb1x00_adc_read(struct ucb - schedule_timeout(1); - } - -- return UCB_ADC_DAT(val); -+ return UCB_IS_1400(ucb->id) ? (val & 0x3ff) : ((val & 0x7fe0) >> 5); - } - - /** -@@ -223,6 +226,47 @@ static irqreturn_t ucb1x00_irq(int irqnr - return IRQ_HANDLED; - } - -+/* -+ * A restriction with interrupts exists when using the ucb1400, as -+ * the codec read/write routines may sleep while waiting for codec -+ * access completion and uses semaphores for access control to the -+ * AC97 bus. A complete codec read cycle could take anywhere from -+ * 60 to 100uSec so we *definitely* don't want to spin inside the -+ * interrupt handler waiting for codec access. So, we handle the -+ * interrupt by scheduling a RT kernel thread to run in process -+ * context instead of interrupt context. -+ */ -+static int ucb1x00_thread(void *_ucb) -+{ -+ struct task_struct *tsk = current; -+ struct ucb1x00 *ucb = _ucb; -+ -+ tsk->policy = SCHED_FIFO; -+ tsk->rt_priority = 1; -+ -+ while (!kthread_should_stop()) { -+ wait_for_completion_interruptible(&ucb->irq_wait); -+ if (try_to_freeze()) -+ continue; -+ ucb1x00_irq(ucb->irq, ucb, NULL); -+ enable_irq(ucb->irq); -+ } -+ -+ ucb->irq_task = NULL; -+ return 0; -+} -+ -+static irqreturn_t ucb1x00_threaded_irq(int irqnr, void *devid, struct pt_regs *regs) -+{ -+ struct ucb1x00 *ucb = devid; -+ if (irqnr == ucb->irq) { -+ disable_irq(ucb->irq); -+ complete(&ucb->irq_wait); -+ return IRQ_HANDLED; -+ } -+ return IRQ_NONE; -+} -+ - /** - * ucb1x00_hook_irq - hook a UCB1x00 interrupt - * @ucb: UCB1x00 structure describing chip -@@ -276,18 +320,22 @@ void ucb1x00_enable_irq(struct ucb1x00 * - - if (idx < 16) { - spin_lock_irqsave(&ucb->lock, flags); -- -- ucb1x00_enable(ucb); -- if (edges & UCB_RISING) { -+ if (edges & UCB_RISING) - ucb->irq_ris_enbl |= 1 << idx; -- ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl); -- } -- if (edges & UCB_FALLING) { -+ if (edges & UCB_FALLING) - ucb->irq_fal_enbl |= 1 << idx; -- ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl); -- } -- ucb1x00_disable(ucb); - spin_unlock_irqrestore(&ucb->lock, flags); -+ -+ ucb1x00_enable(ucb); -+ -+ /* This prevents spurious interrupts on the UCB1400 */ -+ ucb1x00_reg_write(ucb, UCB_IE_CLEAR, 1 << idx); -+ ucb1x00_reg_write(ucb, UCB_IE_CLEAR, 0); -+ -+ ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl); -+ ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl); -+ -+ ucb1x00_disable(ucb); - } - } - -@@ -305,18 +353,16 @@ void ucb1x00_disable_irq(struct ucb1x00 - - if (idx < 16) { - spin_lock_irqsave(&ucb->lock, flags); -- -- ucb1x00_enable(ucb); -- if (edges & UCB_RISING) { -+ if (edges & UCB_RISING) - ucb->irq_ris_enbl &= ~(1 << idx); -- ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl); -- } -- if (edges & UCB_FALLING) { -+ if (edges & UCB_FALLING) - ucb->irq_fal_enbl &= ~(1 << idx); -- ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl); -- } -- ucb1x00_disable(ucb); - spin_unlock_irqrestore(&ucb->lock, flags); -+ -+ ucb1x00_enable(ucb); -+ ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl); -+ ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl); -+ ucb1x00_disable(ucb); - } - } - -@@ -349,16 +395,17 @@ int ucb1x00_free_irq(struct ucb1x00 *ucb - ucb->irq_ris_enbl &= ~(1 << idx); - ucb->irq_fal_enbl &= ~(1 << idx); - -- ucb1x00_enable(ucb); -- ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl); -- ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl); -- ucb1x00_disable(ucb); -- - irq->fn = NULL; - irq->devid = NULL; - ret = 0; - } - spin_unlock_irq(&ucb->lock); -+ -+ ucb1x00_enable(ucb); -+ ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl); -+ ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl); -+ ucb1x00_disable(ucb); -+ - return ret; - - bad: -@@ -478,7 +525,7 @@ static int ucb1x00_probe(struct mcp *mcp - mcp_enable(mcp); - id = mcp_reg_read(mcp, UCB_ID); - -- if (id != UCB_ID_1200 && id != UCB_ID_1300) { -+ if (id != UCB_ID_1200 && id != UCB_ID_1300 && !UCB_IS_1400(id)) { - printk(KERN_WARNING "UCB1x00 ID not found: %04x\n", id); - goto err_disable; - } -@@ -491,12 +538,13 @@ static int ucb1x00_probe(struct mcp *mcp - memset(ucb, 0, sizeof(struct ucb1x00)); - - ucb->cdev.class = &ucb1x00_class; -- ucb->cdev.dev = &mcp->attached_device; -+ ucb->cdev.dev = mcp->dev; - strlcpy(ucb->cdev.class_id, "ucb1x00", sizeof(ucb->cdev.class_id)); - - spin_lock_init(&ucb->lock); - spin_lock_init(&ucb->io_lock); - sema_init(&ucb->adc_sem, 1); -+ init_completion(&ucb->irq_wait); - - ucb->id = id; - ucb->mcp = mcp; -@@ -507,12 +555,22 @@ static int ucb1x00_probe(struct mcp *mcp - goto err_free; - } - -- ret = request_irq(ucb->irq, ucb1x00_irq, 0, "UCB1x00", ucb); -+ ret = request_irq(ucb->irq, -+ UCB_IS_1400(id) ? ucb1x00_threaded_irq : ucb1x00_irq, -+ 0, "UCB1x00", ucb); - if (ret) { - printk(KERN_ERR "ucb1x00: unable to grab irq%d: %d\n", - ucb->irq, ret); - goto err_free; - } -+ if (UCB_IS_1400(id)) { -+ ucb->irq_task = kthread_run(ucb1x00_thread, ucb, "kUCB1x00d"); -+ if (IS_ERR(ucb->irq_task)) { -+ ret = PTR_ERR(ucb->irq_task); -+ ucb->irq_task = NULL; -+ goto err_irq; -+ } -+ } - - set_irq_type(ucb->irq, IRQT_RISING); - mcp_set_drvdata(mcp, ucb); -@@ -531,6 +589,8 @@ static int ucb1x00_probe(struct mcp *mcp - goto out; - - err_irq: -+ if (UCB_IS_1400(id) && ucb->irq_task) -+ kthread_stop(ucb->irq_task); - free_irq(ucb->irq, ucb); - err_free: - kfree(ucb); -@@ -553,6 +613,8 @@ static void ucb1x00_remove(struct mcp *m - } - up(&ucb1x00_sem); - -+ if (UCB_IS_1400(ucb->id) && ucb->irq_task) -+ kthread_stop(ucb->irq_task); - free_irq(ucb->irq, ucb); - class_device_unregister(&ucb->cdev); - } -Index: linux-2.6.15gum/drivers/mfd/ucb1x00-ts.c -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/ucb1x00-ts.c -+++ linux-2.6.15gum/drivers/mfd/ucb1x00-ts.c -@@ -34,10 +34,8 @@ - #include <linux/kthread.h> - #include <linux/delay.h> - --#include <asm/dma.h> --#include <asm/semaphore.h> --#include <asm/arch/collie.h> - #include <asm/mach-types.h> -+#include <asm/arch-sa1100/collie.h> - - #include "ucb1x00.h" - -@@ -46,7 +44,7 @@ struct ucb1x00_ts { - struct input_dev *idev; - struct ucb1x00 *ucb; - -- wait_queue_head_t irq_wait; -+ struct completion irq_wait; - struct task_struct *rtask; - u16 x_res; - u16 y_res; -@@ -206,7 +204,6 @@ static int ucb1x00_thread(void *_ts) - { - struct ucb1x00_ts *ts = _ts; - struct task_struct *tsk = current; -- DECLARE_WAITQUEUE(wait, tsk); - int valid; - - /* -@@ -218,10 +215,8 @@ static int ucb1x00_thread(void *_ts) - - valid = 0; - -- add_wait_queue(&ts->irq_wait, &wait); - while (!kthread_should_stop()) { - unsigned int x, y, p; -- signed long timeout; - - ts->restart = 0; - -@@ -243,8 +238,6 @@ static int ucb1x00_thread(void *_ts) - - - if (ucb1x00_ts_pen_down(ts)) { -- set_task_state(tsk, TASK_INTERRUPTIBLE); -- - ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, machine_is_collie() ? UCB_RISING : UCB_FALLING); - ucb1x00_disable(ts->ucb); - -@@ -257,7 +250,15 @@ static int ucb1x00_thread(void *_ts) - valid = 0; - } - -- timeout = MAX_SCHEDULE_TIMEOUT; -+ /* -+ * Since ucb1x00_enable_irq() might sleep due -+ * to the way the UCB1400 regs are accessed, we -+ * can't use set_task_state() before that call, -+ * and not changing state before enabling the -+ * interrupt is racy. A completion handler avoids -+ * the issue. -+ */ -+ wait_for_completion_interruptible(&ts->irq_wait); - } else { - ucb1x00_disable(ts->ucb); - -@@ -272,16 +273,12 @@ static int ucb1x00_thread(void *_ts) - } - - set_task_state(tsk, TASK_INTERRUPTIBLE); -- timeout = HZ / 100; -+ schedule_timeout(HZ/100); - } - - try_to_freeze(); -- -- schedule_timeout(timeout); - } - -- remove_wait_queue(&ts->irq_wait, &wait); -- - ts->rtask = NULL; - return 0; - } -@@ -294,7 +291,7 @@ static void ucb1x00_ts_irq(int idx, void - { - struct ucb1x00_ts *ts = id; - ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_FALLING); -- wake_up(&ts->irq_wait); -+ complete(&ts->irq_wait); - } - - static int ucb1x00_ts_open(struct input_dev *idev) -@@ -304,7 +301,7 @@ static int ucb1x00_ts_open(struct input_ - - BUG_ON(ts->rtask); - -- init_waitqueue_head(&ts->irq_wait); -+ init_completion(&ts->irq_wait); - ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts); - if (ret < 0) - goto out; -@@ -359,7 +356,7 @@ static int ucb1x00_ts_resume(struct ucb1 - * after sleep. - */ - ts->restart = 1; -- wake_up(&ts->irq_wait); -+ complete(&ts->irq_wait); - } - return 0; - } -Index: linux-2.6.15gum/drivers/mfd/ucb1x00.h -=================================================================== ---- linux-2.6.15gum.orig/drivers/mfd/ucb1x00.h -+++ linux-2.6.15gum/drivers/mfd/ucb1x00.h -@@ -94,6 +94,7 @@ - #define UCB_ID 0x0c - #define UCB_ID_1200 0x1004 - #define UCB_ID_1300 0x1005 -+#define UCB_ID_1400 0x4304 - - #define UCB_MODE 0x0d - #define UCB_MODE_DYN_VFLAG_ENA (1 << 12) -@@ -110,6 +111,8 @@ struct ucb1x00 { - spinlock_t lock; - struct mcp *mcp; - unsigned int irq; -+ struct task_struct *irq_task; -+ struct completion irq_wait; - struct semaphore adc_sem; - spinlock_t io_lock; - u16 id; -@@ -122,6 +125,7 @@ struct ucb1x00 { - struct class_device cdev; - struct list_head node; - struct list_head devs; -+ - }; - - struct ucb1x00_driver; -Index: linux-2.6.15gum/drivers/mfd/mcp-ac97.c -=================================================================== ---- /dev/null -+++ linux-2.6.15gum/drivers/mfd/mcp-ac97.c -@@ -0,0 +1,153 @@ -+/* -+ * linux/drivers/misc/mcp-ac97.c -+ * -+ * Author: Nicolas Pitre -+ * Created: Jan 14, 2005 -+ * Copyright: (C) MontaVista Software Inc. -+ * -+ * This program is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License -+ * version 2 as published by the Free Software Foundation. -+ * -+ * This module provides the minimum replacement for mcp-core.c allowing for -+ * the UCB1400 chip to be driven by the ucb1x00 driver over an AC97 link. -+ */ -+ -+#include <linux/module.h> -+#include <linux/init.h> -+#include <linux/errno.h> -+#include <linux/device.h> -+ -+#include <sound/driver.h> -+#include <sound/core.h> -+#include <sound/ac97_codec.h> -+ -+#include "mcp.h" -+ -+/* ucb1x00 SIB register to ucb1400 AC-link register mapping */ -+ -+static const unsigned char regmap[] = { -+ 0x5a, /* UCB_IO_DATA */ -+ 0X5C, /* UCB_IO_DIR */ -+ 0X5E, /* UCB_IE_RIS */ -+ 0x60, /* UCB_IE_FAL */ -+ 0x62, /* UCB_IE_STATUS */ -+ 0, /* UCB_TC_A */ -+ 0, /* UCB_TC_B */ -+ 0, /* UCB_AC_A */ -+ 0, /* UCB_AC_B */ -+ 0x64, /* UCB_TS_CR */ -+ 0x66, /* UCB_ADC_CR */ -+ 0x68, /* UCB_ADC_DATA */ -+ 0x7e, /* UCB_ID */ -+ 0, /* UCB_MODE */ -+}; -+ -+unsigned int mcp_reg_read(struct mcp *mcp, unsigned int reg) -+{ -+ ac97_t *ac97 = to_ac97_t(mcp->dev); -+ if (reg < ARRAY_SIZE(regmap)) { -+ reg = regmap[reg]; -+ if (reg) -+ return ac97->bus->ops->read(ac97, reg); -+ } -+ return -1; -+} -+EXPORT_SYMBOL(mcp_reg_read); -+ -+void mcp_reg_write(struct mcp *mcp, unsigned int reg, unsigned int val) -+{ -+ ac97_t *ac97 = to_ac97_t(mcp->dev); -+ if (reg < ARRAY_SIZE(regmap)) { -+ reg = regmap[reg]; -+ if (reg) -+ ac97->bus->ops->write(ac97, reg, val); -+ } -+} -+EXPORT_SYMBOL(mcp_reg_write); -+ -+void mcp_enable(struct mcp *mcp) -+{ -+} -+EXPORT_SYMBOL(mcp_enable); -+ -+void mcp_disable(struct mcp *mcp) -+{ -+} -+EXPORT_SYMBOL(mcp_disable); -+ -+#define to_mcp_driver(d) container_of(d, struct mcp_driver, drv) -+ -+static int mcp_probe(struct device *dev) -+{ -+ struct mcp_driver *drv = to_mcp_driver(dev->driver); -+ struct mcp *mcp; -+ int ret; -+ -+ ret = -ENOMEM; -+ mcp = kmalloc(sizeof(*mcp), GFP_KERNEL); -+ if (mcp) { -+ memset(mcp, 0, sizeof(*mcp)); -+ mcp->owner = THIS_MODULE; -+ mcp->dev = dev; -+ ret = drv->probe(mcp); -+ if (ret) -+ kfree(mcp); -+ } -+ if (!ret) -+ dev_set_drvdata(dev, mcp); -+ return ret; -+} -+ -+static int mcp_remove(struct device *dev) -+{ -+ struct mcp_driver *drv = to_mcp_driver(dev->driver); -+ struct mcp *mcp = dev_get_drvdata(dev); -+ -+ drv->remove(mcp); -+ dev_set_drvdata(dev, NULL); -+ kfree(mcp); -+ return 0; -+} -+ -+static int mcp_suspend(struct device *dev, pm_message_t state) -+{ -+ struct mcp_driver *drv = to_mcp_driver(dev->driver); -+ struct mcp *mcp = dev_get_drvdata(dev); -+ int ret = 0; -+ -+ if (drv->suspend) -+ ret = drv->suspend(mcp, state); -+ return ret; -+} -+ -+static int mcp_resume(struct device *dev) -+{ -+ struct mcp_driver *drv = to_mcp_driver(dev->driver); -+ struct mcp *mcp = dev_get_drvdata(dev); -+ int ret = 0; -+ -+ if (drv->resume) -+ ret = drv->resume(mcp); -+ return ret; -+} -+ -+int mcp_driver_register(struct mcp_driver *mcpdrv) -+{ -+ mcpdrv->drv.owner = THIS_MODULE; -+ mcpdrv->drv.bus = &ac97_bus_type; -+ mcpdrv->drv.probe = mcp_probe; -+ mcpdrv->drv.remove = mcp_remove; -+ mcpdrv->drv.suspend = mcp_suspend; -+ mcpdrv->drv.resume = mcp_resume; -+ return driver_register(&mcpdrv->drv); -+} -+EXPORT_SYMBOL(mcp_driver_register); -+ -+void mcp_driver_unregister(struct mcp_driver *mcpdrv) -+{ -+ driver_unregister(&mcpdrv->drv); -+} -+EXPORT_SYMBOL(mcp_driver_unregister); -+ -+MODULE_LICENSE("GPL"); -Index: linux-2.6.15gum/drivers/input/touchscreen/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/input/touchscreen/Kconfig -+++ linux-2.6.15gum/drivers/input/touchscreen/Kconfig -@@ -11,6 +11,25 @@ menuconfig INPUT_TOUCHSCREEN - - if INPUT_TOUCHSCREEN - -+config UCB1400 -+ bool -+ -+config TOUCHSCREEN_UCB1400 -+ tristate "UCB1400 Touchscreen support" -+ depends on ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_GUMSTIX -+ select SND_AC97_BUS -+ select UCB1400 -+ help -+ Say Y here if you have a touchscreen connected to a UCB1400 ADC chip -+ on the AC97 bus of a PXA255/PXA270 host. -+ -+ If unsure, say N. -+ -+ To compile this driver as a module, choose M here: the -+ module will be called ucb1x00-ts. It will also build the modules -+ ucb1x00-core and mcp-ac97 which provide the compatibility layers -+ down to the AC97 bus. -+ - config TOUCHSCREEN_BITSY - tristate "Compaq iPAQ H3600 (Bitsy) touchscreen" - depends on SA1100_BITSY -Index: linux-2.6.15gum/drivers/input/Kconfig -=================================================================== ---- linux-2.6.15gum.orig/drivers/input/Kconfig -+++ linux-2.6.15gum/drivers/input/Kconfig -@@ -87,7 +87,7 @@ config INPUT_JOYDEV - module will be called joydev. - - config INPUT_TSDEV -- tristate "Touchscreen interface" -+ tristate "Compaq touchscreen interface" - ---help--- - Say Y here if you have an application that only can understand the - Compaq touchscreen protocol for absolute pointer data. This is |