CrossRoads:
Bring the arduin's output lines low, then turn off power.
Maybe use SPI.end();
then digitalWrite the 4 pins low. CS for sure, the others may be already depending on what SPI mode you are using.
When powering back up, bring up power first, then SPI.begin(), and CS back high.
The u8glib library seems to have its own SPI initialization routine that I can't find in any of the .c or .h files. I'm a bit concerned about changing the data direction registers and port registers without knowing what their values are supposed to be. Given this concern, is it reasonable to do something like this:
byte ddrcValue = 0;
byte portcValue = 0;
//store current value of DDRC and PORTC
ddrcValue = DDRC;
portcValue = PORTC;
DDRC &= ~0b00011111; //clear all of the bits corresponding to SPI
PORTC &= ~0b00011111;
digitalWrite(A5, HIGH); //turns off the GPS and Display
sleep_enable();
attachInterrupt(0, button_press, LOW);
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
power_adc_disable();
Serial.println("I'm Asleep");
Serial.flush();
sleep_cpu();
//code starts back up here after wake up
Serial.println("I'm awake");
sleep_disable();
DDRC |= ddrcValue; //set DDRC and PORTC back to its pre-sleep state
PORTC |= portcValue;
digitalWrite(A5, LOW); //turns on the GPS and Display