SEATTLE — Kole Calhoun has come a long way since getting a needed break on the disabled list last month, and Garrett Richards looked pretty sharp after his own DL stint.
Calhoun hit a two-run homer, Richards pitched effectively into the sixth inning and the Los Angeles Angels beat the Mariners 7-4 on Wednesday to snap Seattle's eight-game winning streak.
Batting in the leadoff spot for only the fourth time this season, Calhoun had three hits and drove in three runs to help lift Richards (5-4) in his return.
Calhoun's towering homer in the sixth gave the Angels a 6-2 lead. He also had a single in the fourth inning for his first RBI. Calhoun is batting .306 with four homers and eight RBIs since coming off the DL on June 18. He was hitting .145 before that break.
"Kole did his job today," Angels manager Mike Scioscia said. "That's what we need from the guys at the top of the order. It gave us a lot of opportunities today."
Richards, who went on the DL on June 15 with a left hamstring strain, allowed three runs, including back-to-back homers to Kyle Seager and Ryon Healy, over 5 1/3 innings. He struck out eight.
"I just overthrew a couple of heaters there," Richards said of the home runs. "But I felt good. The hamstring felt good. I knew I would be on a leash (80 pitches), so I just tried to execute pitches."
Richards retired 10 of the next 11 hitters he faced after the home runs.
"Garrett just exhaled (after the homers) and made some really good pitches," Scioscia said. "He gave us a chance to win the game."
Blake Parker pitched out of trouble in the ninth for his 10th save. Mike Zunino singled and Denard Span doubled to put runners at second and third, but Dee Gordon flied out to center and Zunino was thrown out at the plate on Jean Segura's grounder to Albert Pujols at first. Mitch Haniger ended it with a groundout to third.
Parker failed to cover first on the grounder to Pujols, so Pujols had no choice but to throw home.
"Pujols getting that guy at the plate was a huge out," Scioscia said. "The pitcher didn't cover there, so Albert made a great decision and threw a strike to the plate."
The Mariners had their chances, including a bases-loaded, no-outs situation in the seventh inning when trailing 6-3. After Gordon and Span struck out, Segura hit a broken-bat flare that looked like it might drop behind second base and score two runs, but Angels second baseman David Fletcher made a leaping catch to end the inning.
"I got a pretty good read off the bat," Fletcher said. "I kind of felt I had a bead on it all the way. It was a nice feeling to save those runs from scoring."
The Mariners struck out 15 times and left eight men on base.
Mike Leake (8-5) allowed four runs and nine hits before leaving with no one out in the fifth. He had allowed two runs or less in seven of his previous eight starts.
"They were battling me, fouling balls off today," Leake said. "Trying to get them to go down, but they found some holes and that's about it."
Luis Valbuena drove in two runs for the Angels and Shohei Ohtani and two hits and scored two runs.
Angels: OF Chris Young was placed on the 10-day DL a day after straining his hamstring. LHP Tyler Skaggs was also placed on the DL with a thigh strain. Skaggs said hopes to miss only one start. OF Jabari Blash and RHP Deck McGuire were recalled from Triple-A Salt Lake, with INF Kaleb Cowart also optioned to Triple-A. ... LHP John Lamb will undergo Tommy John surgery on his left elbow early next week. He'll become the fourth Angels pitcher to have the procedure this season.
Mariners: Manager Scott Servais said RHP Erasmo Ramirez could begin a rehab assignment soon. Ramirez has been on the DL since May 1 because of a right teres major muscle strain in his pitching shoulder. Ramirez said is willing to pitch in relief if that's where he's needed.
Angels RHP Jaime Barria (5-4, 3.40) will start Thursday's series finale in place of Skaggs. Barria is making his 12th start of the season and has given up two earned runs or fewer in four of his last five starts. LHP Marco Gonzales (8-5, 3.77) will make his 18th start for Seattle. Gonzales pitched the first complete game of his career in his last start, a 4-1 victory over Kansas City when he allowed six hits and didn't walk a batter.