The flight was over Sudan when the plane's transponder sent out a distress hijacking code.
Geneva police spokesman Bertrand Staempfli confirmed that Flight ET702 was forced to make an unscheduled landing in the Swiss city at 6 a.m. Monday (0500 GMT). Officials said no one on the flight was injured, and the hijacker was taken into custody after surrendering to Swiss police.
"The pilot went to the toilet and he (the co-pilot) locked himself in the cockpit," Geneva airport chief executive Robert Deillon told reporters. "(He) wanted asylum in Switzerland."
One passenger said the hijacker threatened to crash the plane if the pilot didn't stop pounding on the locked door. Another said he was terrified "for hours" as the plane careened across the sky.
The co-pilot, identified as a 31-year-old Ethiopian man named Hailemedhin Abera, claimed he felt threatened at home. He has no criminal record and had worked for Ethiopian Airlines for five years.
Geneva prosecutor Olivier Jornot said the co-pilot will be charged with taking hostages, a crime punishable by up to 20 years in prison in Switzerland. In Ethiopia, he could face up to 25 years in prison for the hijacking.
There have been at least eight hijackings by Ethiopians or involving Ethiopian planes in the last 25 years.
The deadliest came in 1996, when hijackers stormed the cockpit of a flight from Ethiopia to Ivory Coast via Kenya, demanding that the plane go to Australia. The plane ran out of fuel and crashed off the island nation of Comoros, killing 125 of the 175 people aboard.
The Associated Press and ABC News contributed to this report.