Ryan Johnson struck out five and gave up one run in five solid innings, Jorge Soler and Zach Neto delivered RBI hits and the Angels ended a four-game skid with a 3-2 win over the Detroit Tigers on Sunday.

Johnson (2-4) gave up two hits and walked three. The right-hander escaping a bases-loaded, two-out jam in the fifth when he struck out Dillon Dingler with an 82-mph sweeper. Samy Natera Jr., Chase Silseth and Sam Bachman worked scoreless innings of relief.

Ryan Zeferjahn, who gave up just two earned runs in 19 1/3 innings of his previous 18 games since June 1, gave up a homer to Riley Greene in the top of the ninth as Detroit closed within 3-2. But, Zeferjahn retired the next three batters and earned his third save.

Tigers reliever Drew Anderson (3-4) issued a pair of walks that set up the Angels’ tiebreaking rally in the fifth. Nolan Schanuel, who had three hits, singled to load the bases, and Soler followed with an RBI groundout for a 2-1 lead.

The Angels pushed the lead to 3-1 in the sixth when Oswald Peraza singled, stole second, took third on Tyler Heineman’s groundout and scored on Neto’s RBI single to right.

Detroit starter Casey Mize gave up one run and five hits in 3 1/3 innings, striking out five and walking one. He left after being struck on the left hand by a 109-mph comebacker off the bat of Jo Adell in the fourth inning.

Tigers shortstop Kevin McGonigle homered to leadoff the game. The Angels tied it at 1 in the second when Vaughn Grissom led off with a double, took third on Josh Lowe’s sacrifice bunt and scored on Peraza’s infield single.