Greinke allowed an unearned run in the fifth when Gerald Laird led off with a double and scored on shortstop Mike Aviles' throwing error, halting the right-hander's streak at 38. Greinke ended last season with 14 consecutive scoreless innings and opened this year with 24 in a row.
Kansas City's Alberto Callaspo led off the second with his first big league home run, ending the longest homerless drought in the majors among active players. He had gone 441 at-bats without hitting a home run.
Mark Teahen hit a two-run homer for Kansas City. Greinke (4-0) allowed three hits and walked one.
Rick Porcello, making his third big league start, allowed five runs, four earned, and four hits in six innings for the Tigers.
Porcello uncorked both of his wild pitches and issued one of his two walks in the fifth, leading to two runs. Mitch Maier scored on first baseman Miguel Cabrera's throwing error.
Coco Crisp singled in Miguel Olivo in the seventh for his second RBI of the game but left fielder Josh Anderson threw out Maier at the plate attempting to score from second.
Notes:@ Royals closer Joakim Soria will miss the weekend series with a sore right shoulder. ... Royals RF Jose Guillen, who has been out with a hip injury, is expected to be activated Saturday. ... Detroit reliever Joel Zumaya, who is on the disabled list with a sore right shoulder, has finished his minor league rehab assignment and will be activated Saturday. He joined the club Friday in Kansas City.